답변:
프로그램이 협력한다면 표준 방법이 있습니다. 실행 kill -- -42
(42)는 부모 프로세스의 PID가입니다. 이것은 프로세스 42에 의해 리드 된 프로세스 그룹 의 모든 프로세스에 신호를 보냅니다 (pid는 프로세스 그룹 앞의 빼기 부호).
일반적으로 쉘 프롬프트에서 파이썬 스크립트를 실행하고 단순히 포크 gnuchess
하면 두 프로세스는 동일한 프로세스 그룹에 남아 있어야합니다. 그러나 Ctrl+ C는 SIGINT
전체 포 그라운드 프로세스 그룹으로 전송 하기 때문에 그렇지 않습니다 .
Gnuchess 자체가 세션 리더가 되었기 때문에 (하지만 왜 그렇게하는지 모르겠습니다) 또는 두 번 포크했기 때문에 (python은 gunk를 포크하는 쉘을 포크하기 때문에) 자체 프로세스 그룹에있을 수 있습니다. 이중 포크는 피할 수 있지만 코드를 보지 않으면 어떻게 말할 수 없습니다.
gnuchess
공정 의 pid를 찾는 합리적이고 신뢰할 수있는 POSIX 호환 방법 은 다음과 같습니다.
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
특정 유닉스 변형은이를 달성하는 더 좋은 방법을 가질 수 있습니다 pgrep
.
pkill
이름으로 프로세스를 종료하려면 이렇게ps aux | grep gnuchess
및kill -9 PID
단지가 될 수있다pkill -9 gnuchess