ไม่มากที่จะใส่ที่นี่ในร่างกาย
ไม่มากที่จะใส่ที่นี่ในร่างกาย
คำตอบ:
กระบวนการต้องมีพาเรนต์ (PPID) เคอร์เนลแม้จะไม่ได้เป็นกระบวนการจริง แต่ก็ยังจัดทำกระบวนการจริงบางอย่างเช่น init อย่างน้อยและให้ ID กระบวนการ 0 กับตัวเองทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการอาจแสดงหรือไม่แสดงเป็นกระบวนการในps
เอาต์พุต แต่จะแสดงเสมอ เป็น PPID:
เช่นบน Linux:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:09 ? 00:00:00 /sbin/init
root 2 0 0 09:09 ? 00:00:00 [kthreadd]
root 3 2 0 09:09 ? 00:00:00 [ksoftirqd/0]
...
บน Solaris:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Oct 19 ? 0:01 sched
root 5 0 0 Oct 19 ? 11:20 zpool-rpool1
root 1 0 0 Oct 19 ? 0:13 /sbin/init
root 2 0 0 Oct 19 ? 0:07 pageout
root 3 0 1 Oct 19 ? 117:10 fsflush
root 341 1 0 Oct 19 ? 0:15 /usr/lib/hal/hald --daemon=yes
root 9 1 0 Oct 19 ? 0:59 /lib/svc/bin/svc.startd
...
ยังทราบว่า pid 0
(และ-1
และค่านิยมเชิงลบอื่น ๆ สำหรับเรื่องที่) มีความหมายที่แตกต่างกันขึ้นอยู่กับสิ่งที่ใช้ฟังก์ชั่นพวกเขาชอบkill
, และfork
waitpid
ในที่สุดขณะที่init
กระบวนการให้ pid แบบดั้งเดิม#1
นี่ไม่ใช่กรณีเมื่อใช้การจำลองเสมือนระดับระบบปฏิบัติการเช่นโซน Solaris เนื่องจากอาจมีมากกว่าหนึ่งการinit
ทำงาน:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 4733 3949 0 11:07:25 ? 0:26 /lib/svc/bin/svc.configd
root 4731 3949 0 11:07:24 ? 0:06 /lib/svc/bin/svc.startd
root 3949 3949 0 11:07:14 ? 0:00 zsched
daemon 4856 3949 0 11:07:46 ? 0:00 /lib/crypto/kcfd
root 4573 3949 0 11:07:23 ? 0:00 /usr/sbin/init
netcfg 4790 3949 0 11:07:34 ? 0:00 /lib/inet/netcfgd
root 4868 3949 0 11:07:48 ? 0:00 /usr/lib/pfexecd
root 4897 3949 0 11:07:51 ? 0:00 /usr/lib/utmpd
netadm 4980 3949 0 11:07:54 ? 0:01 /lib/inet/nwamd
มีสองงานที่มี ID กระบวนการที่แตกต่างเป็นพิเศษ: swapper หรือ sched มีกระบวนการ ID 0 และรับผิดชอบเพจจิ้งเช่น jlliagre ใส่ในตัวอย่างก่อนและเป็นส่วนหนึ่งของเคอร์เนลมากกว่ากระบวนการโหมดผู้ใช้ปกติ
ID กระบวนการ 1 มักจะเป็นกระบวนการเริ่มต้นที่รับผิดชอบในการเริ่มต้นและปิดระบบ ในขั้นต้น ID กระบวนการ 1 ไม่ได้ถูกสงวนไว้เฉพาะสำหรับการเริ่มต้นโดยมาตรการทางเทคนิคใด ๆ : มันมี ID นี้เป็นผลมาจากธรรมชาติของการเป็นกระบวนการแรกที่เรียกใช้โดยเคอร์เนล โดยทั่วไประบบ Unix ล่าสุดจะมีองค์ประกอบเคอร์เนลเพิ่มเติมที่มองเห็นเป็น 'กระบวนการ' ซึ่งในกรณีนี้ PID 1 ถูกสงวนไว้อย่างแข็งขันสำหรับกระบวนการเริ่มต้นเพื่อรักษาความสอดคล้องกับระบบเก่า
โดยทั่วไปแล้ว 0 มักใช้เพื่อบ่งบอกถึง 'การอ้างอิงที่เป็นโมฆะ' ซึ่งหมายความว่าแม้ว่าจะมีค่า 0 อยู่ แต่คุณอาจไม่ใช้เพราะคุณต้องการให้ศูนย์มีความหมายถึงค่าพิเศษ
pid
0 มีความหมายพิเศษสำหรับการkill(2)
เรียกระบบซึ่งมันหมายถึงตัวฉันเองและสำหรับwaitpid(2)
ที่หมายถึงกระบวนการใด ๆ ในกลุ่มกระบวนการของฉันอย่างน้อย ไม่ต้องพูดถึงว่าการfork()
กลับมา0
หมายความว่าเราอยู่ในเด็ก