วิธีรับ pid แม่จากลูกที่ได้รับ pid?
ฉันรู้ว่าฉันสามารถตรวจสอบได้ด้วยตนเองภายใต้ / proc ฉันสงสัยว่ามีวิธีที่ชาญฉลาด / ดีกว่าเพื่อให้บรรลุใน Ubuntu หมายเหตุผู้ปกครองอาจหรือไม่อาจถูกฆ่า
ขอบคุณ
วิธีรับ pid แม่จากลูกที่ได้รับ pid?
ฉันรู้ว่าฉันสามารถตรวจสอบได้ด้วยตนเองภายใต้ / proc ฉันสงสัยว่ามีวิธีที่ชาญฉลาด / ดีกว่าเพื่อให้บรรลุใน Ubuntu หมายเหตุผู้ปกครองอาจหรือไม่อาจถูกฆ่า
ขอบคุณ
คำตอบ:
ใช้ ps -o ppid=
ps -o ppid= 2072
ผลตอบแทนที่2061
ซึ่งคุณสามารถใช้ในสคริปต์ ฯลฯps -o ppid= -C foo
ให้ PPID foo
ของกระบวนการที่มีคำสั่ง นอกจากนี้คุณยังสามารถใช้แบบเก่า:ps | grep
ps -eo ppid,comm | grep '[f]oo'
ps -f 2072
ส่งคืน
โพสต์ UID PID PPID C เวลา TTY สถานะ CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstree
ความสัมพันธ์คือpstree -s -p 2072
:
init (1) ───pulseaudio (2061) ───gconfผู้ช่วย (2072)
ppid=
แต่ก่อน pid ดูเหมือนจะจำเป็น ฉันได้ผลลัพธ์ที่แตกต่างถ้าฉันไม่ได้ระบุ
echo $PPID
หากคุณต้องการคำสั่งจาก pid หลักนี้:
cat /proc/$PPID/comm
หากคุณต้องการบรรทัดคำสั่งแบบเต็ม (พร้อมตัวเลือกทั้งหมด):
cat /proc/$PPID/cmdline
$PPID
ถูกกำหนดโดยเชลล์มันเป็น PID ของกระบวนการพาเรนต์/proc/
คุณมี dirs ด้วย PID ของแต่ละกระบวนการ จากนั้นถ้าคุณcat /proc/$PPID/comm
คุณสะท้อนชื่อคำสั่งของ PIDPPID
ถูกกำหนดให้เป็นส่วนหนึ่งของมาตรฐาน POSIX ดังนั้นเชลล์ที่เข้ากันได้กับ POSIX ควรตั้งค่านี้อย่างเหมาะสม ดูpubs.opengroup.org/onlinepubs/9699919799/utilities/…
pstree
โดยชื่อคำสั่งการใช้pstree
คุณสามารถค้นหาด้วยชื่อกระบวนการลูกและรับรหัสกระบวนการ (PID) พร้อมกับพ่อแม่ปู่ย่าตายายและลูก ๆ ของกระบวนการลูก:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
ในกรณีนี้sleep
คือคำสั่งของเด็กและก็ PID 8414
เป็น มันเป็น ID ผู้ปกครอง 841 display-auto-brightness
และถูกเรียกว่า ปู่ย่าตายายเป็นเปลือก ( sh
) ด้วยกระบวนการ ID 839
ของ ดี-ปู่ย่าตายายคือcron
มีกระบวนการ ID 795
ของ ดีที่ดีที่ปู่ย่าตายายนี้ยังcron
มีกระบวนการ ID 763
ของ
หากคุณต้องการค้นหาด้วย ID กระบวนการsleep
แทนชื่อคุณสามารถใช้:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
สังเกตsleep
กระบวนการ ID 14653
เปลี่ยนไป พาเรนต์ (PID 841) หลับเป็นเวลา 1 นาทีตื่นขึ้นเป็นเสี้ยววินาทีจากนั้นเริ่มsleep
คำสั่งใหม่ซึ่งได้รับรหัสกระบวนการใหม่ นี่เป็นอีกสาเหตุที่การค้นหาsleep
ง่ายกว่าการค้นหาด้วย ID กระบวนการ
รหัสนี้มาจาก: ปรับความสว่างของหน้าจอโดยอัตโนมัติตามพระอาทิตย์ขึ้นและตกและปรับให้เข้ากับคำถามนี้
ในการดูลูกโซ่ที่ซ้อนกันตลอดทางจนถึงกระบวนการบูตให้ใช้ PID แทนชื่อ:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
หมายเหตุ:อีกหนึ่งนาทีผ่านไปและคำสั่ง sleep ได้รับ PID ใหม่ (8541)
807
หรือหรือcron
และบรรทัดเดียวกันจะถูกเรียกใช้ซ้ำเช่นเดียวกับเด็ก ๆ มากขึ้นถ้าวางไข่ แต่คำถามก็เกี่ยวกับการหาพ่อแม่ไม่ใช่เด็กทุกคน
1
PID ฉันไม่คิดว่าคุณจะฆ่า PID 1 ได้
ps -efj
ยังสามารถใช้สำหรับการเดียวกัน
ตัวอย่างเช่น,
> ps -efj | head
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Jul01 ? 00:00:13 /sbin/init splash
root 2 0 0 0 0 Jul01 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Jul01 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Jul01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 Jul01 ? 00:06:44 [rcu_sched]
root 8 2 0 0 0 Jul01 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 Jul01 ? 00:00:00 [migration/0]
root 10 2 0 0 0 Jul01 ? 00:00:08 [watchdog/0]
root 11 2 0 0 0 Jul01 ? 00:00:08 [watchdog/1]
ps -o args ...
กับผลลัพธ์ แต่มีกลิ่นนิดหน่อย