ฉันจะฆ่ากระบวนการแม่เท่านั้นได้อย่างไร


10

ฉันมีกระบวนการดังต่อไปนี้

ParentProcess
- กระบวนการเด็ก
- กระบวนการเด็ก
- กระบวนการเด็ก

ฉันจะฆ่ากระบวนการหลักเท่านั้นได้อย่างไร ฉันไม่ต้องการให้กระบวนการของเด็กถูกฆ่า หากฉันพยายามฆ่ากระบวนการผู้ปกครองเด็ก ๆ จะได้รับ SIGHUP และจะถูกฆ่า


5
คำจำกัดความของกระบวนการลูกที่เชื่อมโยงกับกระบวนการหลักหรือไม่?
แบรดแพ็ตตัน

อืมอาจจะใช่ มันผูกติดอยู่กับพ่อแม่
kcm1700

คำตอบ:


8

โดยทั่วไปเมื่อกระบวนการกลายเป็นเด็กกำพร้า (นั่นคือพ่อแม่ของมันตาย) มันถูกนำมาใช้โดย init

สถานการณ์พิเศษที่คุณอธิบายอาจนำไปใช้กับกระบวนการโต้ตอบเมื่อเทอร์มินัลการควบคุมของมันปิดลง (จากWikipedia ):

สัญญาณ SIGHUP ถูกส่งไปยังกระบวนการเมื่อปิดเทอร์มินัลการควบคุม มันถูกออกแบบมาเพื่อแจ้งให้ทราบถึงกระบวนการของการปล่อยสายอนุกรม ในระบบที่ทันสมัยสัญญาณนี้มักจะหมายความว่าการควบคุมหลอกหรือ terminal เสมือนถูกปิด

เพื่อป้องกันสิ่งนี้กระบวนการลูกควรบล็อก SIGHUP ดังนั้นโดยส่วนใหญ่คุณต้องได้รับความร่วมมือจากกระบวนการหลัก

หากการปกครองเป็นเปลือก ( bash, cshและชอบ) และคุณต้องการคำสั่งที่คุณเรียกไม่ได้ที่จะยุติเมื่อเสร็จสิ้นการทุบตีคุณสามารถคำนำหน้าคำสั่งใด ๆ กับnohup(จากinfo coreutils "nohup invocation"):

'nohup' เรียกใช้คำสั่งที่กำหนดพร้อมกับสัญญาณ Hangup ที่ถูกละเว้นเพื่อให้คำสั่งสามารถทำงานต่อในพื้นหลังหลังจากที่คุณออกจากระบบ

ในตัวอย่างนี้:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

find/dev/ttys000จะไม่ถูกฆ่าตายเมื่อสิ้นสุดเปลือกและปิดสถานีควบคุม

ถ้าสคริปต์เปลือกควรปิดกั้น SIGHUP ใช้ builtin trapตามที่อธิบายไว้ที่นี่bashสำหรับ


1
ฉันได้เปิดกระบวนการโดยไม่ต้องรอคำแนะนำใด ๆ ?
kcm1700

เท่าที่ฉันรู้คุณไม่สามารถทำอะไรได้มาก เมื่อกระบวนการทำงานคุณจะไม่สามารถเปลี่ยนวิธีการตอบสนองต่อสัญญาณได้
jaume

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