กระบวนการนีซและลูก


22

ใครสามารถบอกฉันว่าอะไรคือความสัมพันธ์ระหว่างniceระดับที่ระบุและกระบวนการลูก?

ตัวอย่างเช่นถ้าฉันมีค่าเริ่มต้นniceของ0และฉันเริ่มต้นสคริปต์ด้วยnice 5ซึ่งจะเริ่มต้นกระบวนการที่เด็กบางคน (ในกรณีนี้ประมาณ 20 ในแบบคู่ขนาน) สิ่งที่เป็นสิ่งที่ดีของกระบวนการที่เด็กหรือไม่


1
เฉพาะผู้ใช้รูทเท่านั้นที่สามารถลดความสวยงามของกระบวนการได้และคุณค่านั้นได้รับการสืบทอดโดยกระบวนการลูกในforkการใช้งานที่สมเหตุสมผล
jw013

@ jw013 - เพื่อความชัดเจนฉันกำลังเขียนสคริปต์โดยใช้&กระบวนการเด็กไข่ไม่ได้ใช้งานc fork
NWS

3
เว้นแต่คุณจะอยู่ในที่ไม่ Unix / Linux OS ก็เป็นเดิมพันที่ปลอดภัยอย่างเป็นธรรมว่ากระบวนการ spawns forkเปลือกของคุณกับพื้นหลัง
jw013

คำตอบ:


28

กระบวนการย่อยสืบทอดniceค่าใด ๆ ที่ถูกเก็บไว้โดยผู้ปกครอง ณ เวลาที่มีการแยก (ในตัวอย่างของคุณ5)

อย่างไรก็ตามถ้าniceค่าของกระบวนการพาเรนต์เปลี่ยนไปหลังจากฟอร์กกระบวนการ child กระบวนการ child ไม่สืบทอดniceค่าใหม่

topคุณสามารถสังเกตนี้ด้วยเครื่องมือการตรวจสอบ ถ้าniceฟิลด์ (NI) ไม่ได้แสดงโดยค่าเริ่มต้นคุณสามารถเพิ่มได้โดยการกดปุ่มเลือกf Iจะเป็นการเพิ่มNIคอลัมน์ในtopจอแสดงผล

* I: NI = Nice value

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1937 root      20   0  206m  66m  45m S  6.2  1.7  11:03.67 X                                         

ข้อมูลที่ดีจาก man 2 fork

fork () สร้างกระบวนการใหม่โดยทำซ้ำกระบวนการเรียก กระบวนการใหม่ที่เรียกว่าเด็กเป็นสิ่งที่ซ้ำกันแน่นอนของกระบวนการเรียกเรียกว่าผู้ปกครองยกเว้นสำหรับจุดต่อไปนี้:

  • เด็กมี ID กระบวนการเฉพาะของตัวเองและ PID นี้ไม่ตรงกับ ID ของกลุ่มกระบวนการที่มีอยู่ (setpgid (2))
  • ID กระบวนการหลักของเด็กนั้นเหมือนกับรหัสกระบวนการของผู้ปกครอง
  • เด็กไม่สืบทอดการล็อกหน่วยความจำของผู้ปกครอง (mlock (2), mlockall (2))
  • การใช้ทรัพยากรกระบวนการ (getrusage (2)) และตัวนับเวลา CPU (ครั้ง (2)) ถูกรีเซ็ตเป็นศูนย์ในชายด์
  • ชุดสัญญาณที่ค้างอยู่ของเด็กนั้นว่างเปล่าในตอนแรก (การระบุ (2))
  • เด็กไม่สืบทอดการปรับสัญญาณจากผู้ปกครอง (semop (2))
  • เด็กไม่ได้สืบทอดการล็อกเรคคอร์ดจากพาเรนต์ (fcntl (2))
  • เด็กไม่ได้สืบทอดไทเมอร์จาก parent (setitimer (2), alarm (2), timer_create (2)
  • เด็กไม่ได้สืบทอดการดำเนินงาน I / O อะซิงโครนัสที่โดดเด่นจากพาเรนต์ (aio_read (3), aio_write (3)) และไม่สืบทอดบริบท I / O อะซิงโครนัสใด ๆ จากพาเรนต์ (ดู io_setup (2))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.