จะค้นหากระบวนการที่กำลังทำงานอยู่ในเทอร์มินัลได้อย่างไร?


13

เมื่อฉันพยายามปิดแท็บใน Terminal Gnome จะมีข้อความว่า:

ปิดเทอร์มินัลนี้หรือไม่ ยังมีกระบวนการทำงานในเทอร์มินัลนี้ การปิดเทอร์มินัลจะฆ่ามัน

ฉันจะรู้ได้อย่างไรว่ามีอะไรยังทำงานอยู่ jobsโปรดทราบว่ามีอะไรในการส่งออกของ ขอบคุณ


1
หากคุณอยู่ที่พรอมต์ของเชลล์ในขณะที่ข้อความนี้ปรากฏขึ้นอาจเป็นเชลล์ที่ซ้อนกัน (ไม่ใช่เทอร์มินัลอีมูเลเตอร์เริ่มต้นโดยตรง) บางทีคุณอาจได้เริ่มต้นscreen, tmux, script, ssh, mcและหันแผงปิดหรือเพียงแค่เปลือกอื่นโดยการเช่นการพิมพ์bashหรือสิ่งที่ตามเส้นเหล่านี้ กด Ctrl + D หรือพิมพ์exitเพื่อออกจากเชลล์ของคุณคุณจะเห็นว่าคุณอยู่ที่ไหน
egmont

ขอบคุณ หลังจากexitนั้นแท็บเทอร์มินัล gnome ไม่ปิด
ทิม

1
วินาทีexitจะปิดมันแล้ว @egmont คุณสามารถย้ายคำตอบนี้ได้โปรด
Videonauth

คำตอบ:


13
ps T

เลือกกระบวนการทั้งหมดที่เกี่ยวข้องกับเทอร์มินัล


ดีแม้ว่าอาจจะหลอกลวงบ้าง กระบวนการที่เกิดจากnohupคำสั่งถูกยกเลิกการเชื่อมต่อจากเทอร์มินัลดังนั้นอย่าปิดกั้นการปิด แต่พวกเขาจะยังคงอยู่กับคำสั่งนี้
Sergiy Kolodyazhnyy

หรือเพียงแค่ ps สำหรับเรื่องนั้น
user10089632

2

คุณสามารถทำโพรเซสสูงสุดที่กระบวนการที่แสดงรายการ PID ของเชลล์เป็นพาเรนต์ ตามที่คุณทราบหรือไม่อาจรู้เราสามารถระบุpsรูปแบบได้

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

ที่นี่เรารับ PID ของเชลล์จากตัวแปรพิเศษ$$เข้าไปSHELLPIDซึ่ง awk สามารถใช้ใน subshell ของ pipe ได้ โดยพื้นฐานแล้วเราเพิ่งแสดงรายการกระบวนการในรูปแบบ NAME, PID, Parent PID และกรองเฉพาะผู้ที่มี PID ที่เหมาะสมในคอลัมน์สุดท้าย


2

หากคุณเริ่มกระบวนการบางอย่างในเทอร์มินัล (เช่น gedit) กว่า Process ID (PID) (ของ bash) และ Parent Process ID (PPID) (ของ gedit) สำหรับสองกระบวนการนี้จะเหมือนกัน สิ่งนี้สามารถเห็นได้ในผลลัพธ์ของ

ps -ef

คำสั่ง เพื่อให้อ่านง่ายขึ้นช่วยให้ครั้งแรก "ท่อ" ออกไปgrepเพื่อหาสิ่งที่ PID ของทุกคน "ทุบตี" กระบวนการที่กำลังทำงานอยู่และกว่า "ท่อ" awkอีกครั้งเพื่อ awkเลือกเพียง PID และสาขาชื่อกระบวนการ (เขต 2 และ 8) และผลมันไปที่หน้าจอ

ps -ef | grep bash | awk '{print $2 ": " $8}'

จำนวนในเอาต์พุตคือ PID คุณจะใช้มันเพื่อค้นหาว่ากระบวนการเริ่มต้นในเทอร์มินัลที่มี PID นั้น โปรดทราบว่าสามารถมีเอาต์พุตได้มากกว่าหนึ่งบรรทัดหากคุณเปิดมากกว่าหนึ่งเทอร์มินัล ตอนนี้เพื่อค้นหากระบวนการ "ลูก" (ถ้ามี) ของเทอร์มินัลเซสชันนั้นเราสามารถใช้คำสั่งนี้:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

คุณต้องป้อนหมายเลข PID แทน EnterPID ในคำสั่งสุดท้าย หากมีมากกว่าหนึ่ง PID สำหรับ "bash" คุณต้องลองทั้งหมด

คำสั่งสุดท้ายเพียงแค่ดูผลลัพธ์ของps -efและค้นหาว่า PID (ที่คุณได้พบจากคำสั่งก่อนหน้า) และ PPID จะเหมือนกันสำหรับกระบวนการใด ๆ

ข้อมูลเพิ่มเติม:

ผู้ชาย ps

ผู้ชายตกใจ


-1

htopคุณสามารถใช้ ใน Ubuntu 16.04 (และสูงกว่า) sudo apt-get install htopคุณสามารถติดตั้งได้เพียงแค่พิมพ์

topนอกจากนี้คุณยังสามารถใช้


และคุณจะระบุกระบวนการในเทอร์มินัลปัจจุบันhtopอย่างไร?
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.