เหตุใด PGID ของลูกของฉันจึงไม่ประมวลผล PID ของผู้ปกครอง


13

ดังนั้นฉันจึงอ่านทุกที่ว่าคำสั่งนี้ควรยุติกระบวนการลูกทั้งหมดของกระบวนการหลัก:

kill -- -$$

การใช้ ID เชิงลบพร้อมกับคำสั่ง kill อ้างอิง PGID และจากตัวอย่างที่ฉันเห็นมันปรากฏว่า PGID ของกระบวนการลูกควรเป็น PID ของผู้ปกครอง แต่ไม่ใช่กรณีในระบบของฉัน

ในระบบของฉัน PGID ของเด็กนั้นเหมือนกับ PGID ของสคริปต์หลักซึ่งกลายเป็นทุบตี

เกิดอะไรขึ้นที่นี่? ตัวอย่างผิดหรือระบบของฉันตั้งค่าแตกต่างกันหรือไม่?

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

คำตอบ:


11

ฉันคิดว่าคุณหมายถึง PGID ซึ่งย่อมาจากกระบวนการกลุ่ม ID

เมื่อกระบวนการถูกแยกมันจะสืบทอด PGID ของมันจากพาเรนต์ PGID เปลี่ยนแปลงเมื่อกระบวนการกลายเป็นผู้นำกลุ่มกระบวนการจากนั้น PGID ของมันจะถูกคัดลอกจาก PID จากนั้นเป็นต้นมาเด็กใหม่จะประมวลผลและวางลูกหลานของพวกเขาสืบทอดว่า PGID (เว้นแต่พวกเขาจะเริ่มกลุ่มกระบวนการใหม่ของตนเอง)

ในเชลล์ที่มีการควบคุมงานเช่นเชลล์แบบโต้ตอบส่วนใหญ่แต่ละงานจะอยู่ในกลุ่มกระบวนการของตนเอง หากคุณเรียกใช้เชลล์สคริปต์กระบวนการเชลล์ที่รันสคริปต์จะเป็นหัวหน้ากลุ่มและ PGID จะเท่ากับ PID ของมัน

ในเชลล์ที่ไม่มีการควบคุมงานเช่นเชลล์ส่วนใหญ่ที่ใช้ในการรันสคริปต์คำสั่งจะทำงานในกลุ่มกระบวนการของเชลล์

ไวยากรณ์kill -- -Nฆ่ากระบวนการทั้งหมดในกลุ่มด้วย PGID = N คุณไม่สามารถใช้กับ PID ที่กำหนดเองได้เพียง PID ของผู้นำกลุ่มกระบวนการเนื่องจากนั่นคือ PGID นี่คือสิ่งที่เปลือกหอยมี

kill %jobid

ไวยากรณ์ทำงานได้ - มันแปลภายใน%jobidเป็น PGID ของงานและส่งสัญญาณไปยัง PGID นั้น

ไม่มีวิธีง่ายๆในการเรียกใช้สคริปต์ในกลุ่มกระบวนการของตนเองจากเชลล์สคริปต์อื่น ดูวิธีตั้งค่ากลุ่มกระบวนการของเชลล์สคริปต์สำหรับคำแนะนำบางอย่าง


คุณกำลังบอกว่าเชลล์ที่มีหรือไม่มีการควบคุมงานทำสิ่งเดียวกันหรือไม่?
TCZ8

1
ไม่เชลล์ที่มีการควบคุมงานจะเริ่มกลุ่มกระบวนการใหม่สำหรับแต่ละงาน เชลล์ที่ไม่มีการควบคุมงานจะไม่เริ่มกลุ่มกระบวนการใหม่สำหรับแต่ละงานมันจะรันมันในกลุ่มกระบวนการของตัวเอง
Barmar

ว้าว .. ฉันไม่ได้อ่านครั้งแรกเลย ดังนั้นฉันเดาว่าสิ่งที่ฉันต้องการคือการเปิดการควบคุมงาน? เพื่อให้แน่ใจว่าเด็ก ๆ มี PGID ที่ตรงกับ PID ของสคริปต์หลักหรือไม่ หรือเด็กแต่ละคนจะได้รับ PGID ที่เป็นเอกลักษณ์ของตนเองหรือไม่
TCZ8

ฉันพบเอกสารออนไลน์เกี่ยวกับการควบคุมงาน ขอบคุณสำหรับความช่วยเหลือของคุณ Barmar
TCZ8

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