나는 물었다 하나의 질문Python의 하위 프로세스 모듈에서 여러 줄의 메시지를 얻는 방법을 알아보세요.
문제는 테스트 중에 gnuchess 프로세스를 실행하는 Python 프로세스를 종료해야 한다는 것입니다. 명령줄에서 ^c를 사용하면 Python 프로세스가 종료되는 것처럼 보이지만 GNU 프로세스는 종료되지 않습니다.
그누체스를 죽이기 위해 pid를 얻었어보조 | 그렙 그누체스그리고 달리다킬-9 PID. Python과 gnuchess 프로세스를 종료하는 다른 방법이 있습니까?
답변1
프로그램이 협력하는 경우 표준 접근 방식이 있습니다. kill -- -42
42가 상위 프로세스의 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>