프로세스와 하위 프로세스를 종료하는 방법은 무엇입니까?

프로세스와 하위 프로세스를 종료하는 방법은 무엇입니까?

나는 물었다 하나의 질문Python의 하위 프로세스 모듈에서 여러 줄의 메시지를 얻는 방법을 알아보세요.

문제는 테스트 중에 gnuchess 프로세스를 실행하는 Python 프로세스를 종료해야 한다는 것입니다. 명령줄에서 ^c를 사용하면 Python 프로세스가 종료되는 것처럼 보이지만 GNU 프로세스는 종료되지 않습니다.

그누체스를 죽이기 위해 pid를 얻었어보조 | 그렙 그누체스그리고 달리다킬-9 PID. Python과 gnuchess 프로세스를 종료하는 다른 방법이 있습니까?

답변1

프로그램이 협력하는 경우 표준 접근 방식이 있습니다. kill -- -4242가 상위 프로세스의 pid인 경우 실행하세요 . 모든 프로세스에 신호를 보냅니다.프로세스 그룹프로세스 42에 의해 부팅됩니다(pid 앞의 빼기 ​​기호는 프로세스 그룹을 나타냄).

일반적으로 쉘 프롬프트에서 Python 스크립트를 실행하고 단지 분기하는 경우 gnuchess두 프로세스는 동일한 프로세스 그룹에 남아 있어야 합니다. 하지만 Ctrl+는 전체 포그라운드 프로세스 그룹으로 C전송되기 때문에 그렇지 않은 것 같습니다 .SIGINT

Gnuchess는 자신이 세션 리더가 되거나(하지만 왜 그렇게 하는지는 모르겠습니다) 자체 프로세스 그룹에 있을 수도 있고, 두 번 분기했기 때문에(파이썬에서 쉘을 분기하고 Gnuchess를 다시 분기했기 때문에) 자체 프로세스 그룹에 있을 수 있습니다. 이중 포크는 아마도 피할 수 있지만 코드를 보지 않고는 방법을 말할 수 없습니다.


프로세스의 pid를 찾는 상당히 안정적이고 POSIX 호환 방법은 다음과 같습니다 gnuchess.

gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')

특정 UNIX 변형에는 이를 달성하는 더 나은 방법이 있을 수 있습니다(예 pgrep: .

답변2

노력하다:

pkill <processname>

관련 정보