Có một phương pháp tiêu chuẩn, nếu các chương trình hợp tác. Chạy kill -- -42
trong đó 42 là pid của quá trình cha. Điều này sẽ gửi tín hiệu đến tất cả các quy trình trong nhóm quy trình dẫn theo quy trình 42 (dấu trừ trước pid có nghĩa là nhóm quy trình).
Thông thường, nếu bạn chạy tập lệnh python của bạn từ dấu nhắc shell và nó chỉ đơn giản là rẽ nhánh gnuchess
, hai quy trình sẽ vẫn nằm trong cùng một nhóm quy trình. Nhưng điều này dường như không phải là trường hợp, vì Ctrl+ Cgửi SIGINT
đến toàn bộ nhóm quy trình tiền cảnh.
Gnuchess có thể nằm trong nhóm quy trình riêng của mình vì nó tự biến mình thành một người lãnh đạo phiên (nhưng tôi không biết tại sao nó lại làm điều này), hoặc bởi vì bạn đã nhân đôi nó (con trăn tạo ra một cái vỏ mà không phải là nữ thần). Một ngã ba đôi có thể tránh được, nhưng tôi không thể cho bạn biết làm thế nào mà không nhìn thấy mã của bạn.
Một cách hợp lý đáng tin cậy và phù hợp với POSIX để tìm ra mấu chốt của gnuchess
quy trình là
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
Các biến thể unix cụ thể có thể có những cách tốt hơn để đạt được điều này, chẳng hạn như pgrep
.
pkill
để giết một quá trình theo tên, vì vậyps aux | grep gnuchess
và bạnkill -9 PID
có thể trở thànhpkill -9 gnuchess