Câu hỏi của bạn tự trả lời, điều này xảy ra bởi vì các quy trình này đang chạy như là trẻ em dưới trình giả lập thiết bị đầu cuối. Vì vậy, bạn giết trình giả lập thiết bị đầu cuối, và khi làm như vậy, giết tất cả các tiến trình con (vì các con đang chạy trong cùng nhóm quy trình với trình giả lập thiết bị đầu cuối điều khiển).
Xem, ví dụ, như sau:
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 }
Tất cả các quy trình này đang chạy trong các quy trình 'xfce4-terminal', vì vậy nếu tôi giết quy trình đó thì nó sẽ tự động giết tất cả các quy trình con trong nhóm quy trình ... ví dụ như cách thoát khỏi cửa sổ giả lập thiết bị đầu cuối sẽ nhất thiết phải hủy kết nối SSH của tôi.
Các chương trình như shell tạo ra các nhóm quy trình mới, thường đặt các tiến trình con liên quan vào một nhóm. Mỗi công việc là một nhóm quy trình. Bên ngoài kernel, shell điều khiển một công việc bằng cách gửi tín hiệu đến nhóm quy trình của công việc bằng lệnh gọi hệ thống killpg, cung cấp tín hiệu cho tất cả các quy trình trong một nhóm quy trình.