มีวิธีใดบ้างที่จะรู้ว่าใครเป็นลูกของกระบวนการเฉพาะ ตัวอย่างเช่นเด็ก ๆ ที่ ID ผู้ปกครองของพวกเขาเป็น foo?
มีวิธีใดบ้างที่จะรู้ว่าใครเป็นลูกของกระบวนการเฉพาะ ตัวอย่างเช่นเด็ก ๆ ที่ ID ผู้ปกครองของพวกเขาเป็น foo?
คำตอบ:
คุณกำลังมองหาpstree
คำสั่ง
pstree
โดยตัวมันเองจะแสดงรายการกระบวนการทั้งหมดในรูปแบบต้นไม้ (เช่นlsblk
ไม่) คุณสามารถใช้การ-p
ตั้งค่าสถานะเพื่อรับ PID ที่แสดงรายการเช่นกันและ-s
เพื่อแสดงกระบวนการหลักด้วย:
$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
|-{gdbus}(605)
|-{gmain}(603)
`-{probing-thread}(606)
A (อาจ) วิธีที่เป็นไปตาม POSIX ในการรับ PID ของเด็ก (ที่ฉันได้กล่าวถึงในความคิดเห็นอื่น ๆ ):
ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'
สิ่งนี้บอกps
ให้เขียน parent PID และ PID ของกระบวนการทั้งหมด (โดยไม่มีส่วนหัว) จากนั้นใช้awk
เพื่อดูว่าบรรทัดใดมี PID ที่กำหนดในฟิลด์แรก (parent PID) และพิมพ์ฟิลด์ที่สองที่เกี่ยวข้อง (child PID)
หากคุณเพียงต้องการที่จะเห็นเด็ก ๆ ทันทีของกระบวนการที่มี PID คือ123
คุณสามารถใช้ตัวเลือกps
คำสั่ง--ppid
:
ps --ppid 123
คุณสามารถรวมมันเข้ากับpidof
คำสั่งเพื่อรับค่าย่อยของกระบวนการตามชื่อเช่นกำหนดกระบวนการที่เรียกว่าfoo
ps --ppid $(pidof foo)
ตัวเลือกอื่นคือการใช้การตรวจสอบระบบ (มาพร้อมติดตั้งไว้แล้ว) ในตัวเลือก "การอ้างอิง" ของ SM Menubar ภายใต้ "มุมมอง" เพื่อรับการตอบกลับด้วยภาพแสดงกระบวนการของผู้ปกครองและเด็กเช่นการแสดงในภาพหน้าจอด้านล่าง
ฉันชอบ CL (Command Line) ด้วยตัวเองและแนะนำว่าผู้ที่ใช้ Linux ในกรณีนี้ Ubuntu เป็นประจำทุกวันใช้เวลาอย่างชาญฉลาดในการเรียนรู้คำสั่งพื้นฐานผ่านแอพพลิเคชั่น GUI หรืออย่างน้อยก็สามารถเป็นผู้เชี่ยวชาญ ระดับหนึ่ง!
ฉันไม่ใช่ผู้เชี่ยวชาญ แต่การอ่านคำตอบข้างต้นดูเหมือนว่าฉันอาจมีวิธีโดยตรงมากกว่าในการทำเช่นนี้ผ่านระบบไฟล์ proc เช่นสำหรับการใช้งานเชิงโปรแกรมในสคริปต์แทนที่จะแสดงผลแบบมนุษย์อ่านได้ และแน่นอนมี: สำหรับกระบวนการที่มีรหัส ID $ mypid กระบวนการที่เด็กมีการระบุไว้ใน
/proc/$mypid/task/$mypid/children
เช่น
$ cat /proc/3123/task/3123/children
3131 3133
ในทำนองเดียวกันคุณสามารถรับ ID กระบวนการหลักผ่านรายการ "PPid" ในไฟล์
/proc/$mypid/task/$mypid/status
เช่น
$ grep PPid /proc/3131/task/3131/status
PPid: 3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123
ฉันไม่แน่ใจว่าอุปกรณ์พกพานี้เหนือกว่าระบบ Linux อย่างไร
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
ควรเป็นไปตาม POSIX