프로세스 자체가 아닌 특정 프로세스에 뿌리를 둔 프로세스 트리에서 모든 (하위) 프로세스를 종료하는 방법은 무엇입니까?

프로세스 자체가 아닌 특정 프로세스에 뿌리를 둔 프로세스 트리에서 모든 (하위) 프로세스를 종료하는 방법은 무엇입니까?

나는 ( ) 자식 프로세스를 python생성하고 그 결과 여러 자식 프로세스 자체를 생성하는 프로세스를 가지고 있습니다. 여기서는 프로세스를 종료하지 않고 루트로 간주되는 프로세스 트리의 모든 프로세스를 종료하고 싶습니다 .gitgit clonegitpython

가능한 해결 방법(단, 주의 사항 있음):

  • python자식 프로세스 트리를 재귀적으로 탐색합니다 /proc/<pid>.

이 경우 이 프로세스 계층 구조의 프로세스가 종료되기 전에 하위 프로세스를 생성하지 않도록 하려면 어떻게 해야 합니까? 이 경우 하위 프로세스는 고아 프로세스(경합 조건)가 됩니다.

  • 다른 모든 하위 항목을 python포함하는 프로세스의 프로세스 그룹을 종료합니다 .git

이 경우 python프로세스도 종료되는데, 이는 발생하고 싶지 않습니다.

프로세스 자체 python가 아닌 process 를 기반으로 하는 프로세스 계층 구조의 모든 프로세스를 안정적으로 종료할 수 있는 방법이 있습니까 ?python

답변1

pslist패키지에는 rkill모든 하위 항목을 종료할 수 있는 명령이 포함되어 있습니다.

사람 plist:

pslist 유틸리티는 현재 프로세스 목록을 검사하여 지정된 프로세스와 모든 하위 프로세스를 찾습니다. [..]

rkill로 호출되면 이 유틸리티는 프로세스에 대한 정보를 표시하지 않고 대신 신호를 보냅니다. 명령줄에 지정하지 않으면 종료(SIGTERM) 신호가 전송됩니다.

git의 pid만 주면 됩니다.

(우분투/아치 등에서 사용 가능)

관련 정보