คำถามของคุณตอบเองสิ่งนี้เกิดขึ้นเพราะกระบวนการเหล่านี้ทำงานเหมือนเด็ก ๆ ภายใต้โปรแกรมจำลองเทอร์มินัล ดังนั้นคุณจะฆ่าเทอร์มินัลอีมูเลเตอร์และในการทำเช่นนั้นให้ฆ่ากระบวนการลูกทั้งหมด (เนื่องจากเด็ก ๆ กำลังทำงานภายใต้กลุ่มกระบวนการเดียวกันกับเทอร์มินัลเครื่องจำลองการควบคุม)
ดูตัวอย่างต่อไปนี้:
csb@darwin[~]$ ps fauwx | grep -A6 "xfce4-terminal" | awk '{ for (i = 2; i <= 9; i++) $i="" ; print $0 }'
csb 0:32 xfce4-terminal --geometry=271x65 --display :0.0 --role=Terminal-0x1340050-2606-1351620352 --show-menubar --show-borders --hide-toolbars --working-directory /home/csb --tab --working-directory /home/csb
csb 0:00 \_ gnome-pty-helper
csb 0:00 \_ bash
csb 0:00 |
\_ ssh [redacted]
csb 0:00 \_ bash
csb 0:00 \_ ps fauwx
csb 0:00 \_ grep --color=auto -A6 xfce4-terminal
csb 0:00 \_ awk { for (i = 2; i <= 9; i++) $i="" ; print $0 }
กระบวนการทั้งหมดเหล่านี้กำลังทำงานภายใต้กระบวนการ 'xfce4-terminal' ดังนั้นถ้าฉันฆ่ากระบวนการนั้นมันจะฆ่ากระบวนการลูกทั้งหมดในกลุ่มกระบวนการโดยอัตโนมัติ ... เช่นเดียวกับที่ออกจากหน้าต่างเทอร์มินัลอีมูเลเตอร์ จำเป็นต้องทำลายการเชื่อมต่อ SSH ของฉัน
โปรแกรมเช่น shells สร้างกลุ่มกระบวนการใหม่โดยปกติแล้วจะวางกระบวนการลูกที่เกี่ยวข้องลงในกลุ่ม แต่ละงานคือกลุ่มกระบวนการ นอกเคอร์เนลเชลล์จัดการงานโดยส่งสัญญาณไปยังกลุ่มกระบวนการของงานด้วยการเรียกระบบ killpg ซึ่งส่งสัญญาณไปยังกระบวนการทั้งหมดในกลุ่มกระบวนการ