ทำไมค่า PID ไม่ต่อเนื่อง


14

ถ้าเราพิมพ์ps -efแล้วเราจะได้รับรายการกระบวนการ ทำไมหมายเลข PID ไม่ต่อเนื่อง

คำตอบ:


16

บน Ubuntu พวกมันต่อเนื่อง ในระบบปฏิบัติการอื่นมันอาจแตกต่างกัน

เคอร์เนลจะจัดสรร PID ในช่วง (RESERVED_PIDS, PID_MAX_DEFAULT) มันทำตามลำดับในแต่ละเนมสเปซ (งานในเนมสเปซที่แตกต่างกันสามารถมี ID เดียวกันได้) ในกรณีที่ช่วงหมดการกำหนด pid จะวนไปมา

( /programming/3446727/how-does-linux-determine-the-next-pid )

ใจแม้ว่า ...

  • การกำหนดตารางเคอร์เนลสามารถแยกกระบวนการดังนั้นจึงอาจดูเหมือนจะข้ามหมายเลข
  • PID จะหายไปเมื่องานนั้นสิ้นสุด
  • PID จะไม่ถูกใช้ซ้ำจนกว่าจะถึง PID_MAX_DEFAULT
  • PID reserverd ถูกข้ามไป

บางหัวข้อใน stackoverflow:

ในความคิดเห็นคือคำสั่งเพื่อทดสอบการกำหนด PID:

for i in {1..20}; do sh -c 'echo $$'; done

"การกำหนดตารางเคอร์เนลสามารถแยกกระบวนการได้ดังนั้นจึงอาจดูเหมือนจะข้ามหมายเลข" - เคอร์เนลสามารถสร้างกระบวนการในขณะที่การกำหนดกระบวนการที่จะทำงาน? ดูเหมือนว่าแปลก
user253751

เป็นเรื่องปกติที่ตัวจัดกำหนดการจะแยกกระบวนการ น่าจะเป็นบิตนี้: lxr.free-electrons.com/source/kernel/pid.c#L125ที่ determing มัน :)
Rinzwind

8

ID กระบวนการที่หายไปในระหว่างนั้นจะตายไปแล้วและ PID ของพวกเขาจะถูกนำกลับมาใช้ใหม่โดยเคอร์เนลในกระบวนการภายหลัง

กระบวนการที่ตายแล้วจะไม่ปรากฏในตารางกระบวนการ (ยกเว้นซอมบี้) ดังนั้นps -efจะไม่แสดงกระบวนการเหล่านั้น


3

ปกติ PID อย่างต่อเนื่อง ps -efแต่กระบวนการบางอย่างจะตายเพียงแค่เวลาที่คุณเรียกใช้คำสั่ง

นอกจากนี้กระบวนการบางอย่างอาจเป็นเพียงกระบวนการย่อยของกระบวนการอื่นซึ่งไม่ได้แสดงไว้ในps -efคำสั่ง หากต้องการดูผลลัพธ์ที่ขยายออกมาและคุณสามารถตรวจสอบ PID อย่างต่อเนื่องได้pstree

pstree -p

ตัวอย่างผลลัพธ์:

   ├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│                   ├─{teamviewerd}(3475)
│                   ├─{teamviewerd}(3476)
│                   ├─{teamviewerd}(3477)
│                   ├─{teamviewerd}(3478)

ในขณะที่ถ้าคุณเรียกใช้ps -efคุณจะเห็นกระบวนการหลัก

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f

2

พวกมันต่อเนื่อง PID ถูกกำหนดตามลำดับจนกระทั่งถึงขีด จำกัด สูงสุด หลังจากขีด จำกัด นี้จะเริ่มต้นอีกครั้งจากศูนย์

ดังนั้นมันเป็นเพียงว่า PID ที่ขาดหายไปps -efนั้นเป็นกระบวนการที่ตายแล้ว โปรดทราบว่าps -efรายการกระบวนการที่ทำงานอยู่เท่านั้น

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