กระบวนการเริ่มต้น: บรรพบุรุษของกระบวนการทั้งหมดหรือไม่


26

ฉันได้เรียนรู้อยู่เสมอว่ากระบวนการเริ่มต้นเป็นบรรพบุรุษของกระบวนการทั้งหมด ทำไมโพรเซส 2 จึงมี PPID เป็น 0

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]

คำตอบ:


32

อย่างแรก "บรรพบุรุษ" ไม่ใช่สิ่งเดียวกับ "ผู้ปกครอง" บรรพบุรุษสามารถเป็น…ผู้ปกครองของผู้ปกครอง…และผู้ปกครองเคอร์เนลติดตามเพียงระดับเดียว อย่างไรก็ตามเมื่อโปรเซสตายลูก ๆ ของมันจะถูกนำมาใช้โดย init ดังนั้นคุณจะเห็นกระบวนการจำนวนมากที่พาเรนต์เป็น 1 บนระบบทั่วไป

ระบบลีนุกซ์สมัยใหม่ยังมีกระบวนการบางอย่างที่เรียกใช้เคอร์เนลโค้ด แต่ได้รับการจัดการเช่นเดียวกับกระบวนการผู้ใช้ (พวกเขาไม่เชื่อฟังกฎการจัดการหน่วยความจำตามปกติเนื่องจากพวกเขากำลังเรียกใช้รหัสเคอร์เนล) กระบวนการเหล่านี้ล้วน แต่เกิดจากkthreadd(เป็นจุดเริ่มต้นของเคอร์เนลเธรด) คุณสามารถรับรู้พวกเขาด้วย ID กระบวนการหลักของพวกเขา (2) หรือโดยปกติแล้วโดยความจริงที่ว่าpsพวกเขามีชื่อระหว่างวงเล็บเหลี่ยมหรือโดยความจริงที่ว่า/proc/2/exe(ปกติลิงค์สัญลักษณ์ไปยังกระบวนการปฏิบัติการ) ไม่สามารถอ่านได้

โปรเซส 1 ( init) และ 2 ( kthreadd) ถูกสร้างขึ้นโดยตรงจากเคอร์เนลตอนบูทดังนั้นพวกมันจึงไม่มีพาเรนต์ ค่า 0 ถูกใช้ในฟิลด์ ppid เพื่อระบุว่า คิดว่า 0 เป็นความหมาย "เคอร์เนลตัวเอง" ที่นี่

ลินุกซ์ยังมีสิ่งอำนวยความสะดวกบางอย่างสำหรับเคอร์เนลเพื่อเริ่มกระบวนการผู้ใช้ที่มีการระบุตำแหน่งผ่านพารามิเตอร์ sysctlในบางสถานการณ์ ตัวอย่างเช่นเคอร์เนลสามารถทริกเกอร์เหตุการณ์การโหลดโมดูล (เช่นเมื่อค้นพบฮาร์ดแวร์ใหม่หรือเมื่อมีการใช้โปรโตคอลเครือข่ายบางครั้ง) โดยการเรียกโปรแกรมในkernel.modprobeค่า sysctl เมื่อโปรแกรมทิ้งแกนเคอร์เนลจะเรียกโปรแกรมที่ระบุโดยkernel.core_patternถ้ามี


1
ดังนั้นinit"บรรพบุรุษ" ของทั้งหมดuser threadsในขณะที่[kthreadd ]เป็น "ผู้ปกครอง" ของทั้งหมดkernel threadsใช่มั้ย ขอบคุณ!
น่านเสี่ยว

1
@NanXiao ส่วนใหญ่ใช่ ดังที่ฉันพูดถึงในย่อหน้าสุดท้ายของฉันมีวิธีอื่น ๆ สำหรับกระบวนการผู้ใช้ที่จะเริ่มต้นโดยเคอร์เนลเช่นโปรแกรมที่ระบุไว้ในkernel.core_patternเมื่อโปรแกรมทิ้งแกน ในระบบทั่วไปคุณจะไม่เห็นพวกเขาเพราะกระบวนการเหล่านั้นมักจะทำงานได้อย่างรวดเร็วและจากนั้นออก
Gilles 'ดังนั้นหยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.