กระบวนการ“ รายงานย่อย” คืออะไร?


38

คำว่า "subreaper" ถูกใช้ในบางคำตอบ การค้นหา Google ยังเปิดรายการที่คำว่า "เพิ่งใช้"

ฉันจะเข้าใจได้อย่างไรว่า "subreaper" คืออะไร?


3
ฉันไม่เคยได้ยินคำพูดมาก่อน คุณสามารถรวมการอ้างอิงบางส่วนสำหรับบริบทได้หรือไม่
Celada

5
นี่คือหนึ่ง: ผมใช้มันในคำตอบที่unix.stackexchange.com/a/177361/5132
JdeBP

คำถามที่เกี่ยวข้องที่บางทีฉันควรโพสต์ที่นี่แทนที่จะเป็นที่ serverfault serverfault.com/questions/747070/…
artfulrobot

คำตอบ:


49

นี้ถูกนำมาใช้กับลินุกซ์เคอร์เนล 3.4เป็นธงของการโทรระบบprctl ()

จากprctl(2)manpage:

[... ] Subreaper เติมเต็มบทบาทของinit(1)กระบวนการสืบทอด เมื่อการยุติกระบวนการที่ถูกกำพร้า (กล่าวคือผู้ปกครองทันทีได้สิ้นสุดลงแล้ว) และทำเครื่องหมายว่ามี subreaper ส่วนย่อยที่อยู่ใกล้ที่สุดของบรรพบุรุษที่ยังมีชีวิตอยู่จะได้รับ SIGCHLDสัญญาณและสามารถค้นหาwait(2)กระบวนการสิ้นสุดสถานะได้

กระบวนการสามารถกำหนดตัวเองเป็น subreaper prctl(PR_SET_CHILD_SUBREAPER)ด้วย ถ้าเป็นเช่นนั้นก็ไม่ได้init(PID 1) ที่จะกลายเป็นแม่ของกำพร้ากระบวนการที่เด็กแทนปู่ย่าตายายที่อาศัยอยู่ใกล้ที่สุดที่ถูกทำเครื่องหมายเป็น subreaper จะกลายเป็นผู้ปกครองใหม่ ถ้าไม่มีปู่ย่าตายายที่อยู่อาศัยinitไม่

เหตุผลที่จะใช้กลไกนี้ก็คือว่าผู้จัดการบริการ userspace / ผู้บังคับบัญชา (เช่นupstart, systemd) จำเป็นที่จะต้องติดตามการบริการเริ่มต้นของพวกเขา บริการจำนวนมากทำให้เสียสละด้วยการฟอร์กซ้ำสองครั้งและรับการอ้างถึง PID อีกครั้งโดยนัย1. ผู้จัดการบริการจะไม่สามารถรับSIGCHLDสัญญาณสำหรับพวกเขาได้อีกต่อไปและไม่รับผิดชอบในการเลี้ยงเด็กด้วยwait()อีกต่อไป ข้อมูลทั้งหมดเกี่ยวกับเด็กหายไปในขณะนี้ PID 1 ล้างกระบวนการที่ได้รับการจดสิทธิบัตรใหม่ ขณะนี้กระบวนการตัวจัดการบริการสามารถทำเครื่องหมายตัวเองว่าเป็น "sub-init" และขณะนี้สามารถอยู่ในฐานะผู้ปกครองของกระบวนการ orphaned ทั้งหมดที่สร้างโดยบริการที่เริ่มต้น SIGCHLDสัญญาณทั้งหมดจะถูกส่งไปยังผู้จัดการบริการ

โดยปกติแล้ว daemon จะถูกสร้างโดยการฟอร์กสองครั้งด้วยกระบวนการระดับกลางที่ออกหลังจากฟอร์กหลาน นี้เป็นเทคนิคทั่วไปเพื่อหลีกเลี่ยงกระบวนการผีดิบ สคริปต์ init เรียกเด็ก ๆ เด็กคนนั้นส้อมอีกครั้งและออกไปทันที หลานจะได้รับการอุปการะinitซึ่งเรียกร้องอย่างต่อเนื่องwait()เพื่อรวบรวมสถานะทางออกของลูก ๆ ของเขาเพื่อหลีกเลี่ยงซอมบี้ กับแนวคิดของ subreapers ผู้จัดการบริการ userspace initตอนนี้กลายเป็นผู้ปกครองใหม่แทน


ดังนั้นฉันสามารถคิดได้หรือไม่ว่ากระบวนการ "เก็บเกี่ยว" กระบวนการย่อย "- ประมวลผล" หรือกระบวนการนี้เป็นเครื่องมือ "ย่อย" เนื่องจากเครื่องมือเก็บเกี่ยว "หลัก" เป็น init แค่พยายามคิดว่าคำนี้เป็นคำประกาศเกียรติคุณได้อย่างไร ขอบคุณสำหรับคำตอบ!
kenchew

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