pkill은 프로세스의 바로 후손을 지나 프로세스를 종료하지 않습니다.

pkill은 프로세스의 바로 후손을 지나 프로세스를 종료하지 않습니다.

프로세스 체인을 종료하고 싶습니다. 예:

PID  PPID
100  XXX
101  100
102  101

PID 100과 101을 사용하면 pkill -P 100예상대로 죽지만 102는 PPID이므로 init가 제공됩니다.

pkill이 프로세스의 직계 자손을 지나 연결된 프로세스를 계속 종료하도록 하려면 어떻게 해야 합니까?

답변1

pkill부모가 100인 프로세스를 종료했습니다. 부모의 부모가 100인 프로세스는 종료하지 않았습니다.

Linux pkill나 FreeBSD에는 프로세스 트리를 탐색하는 옵션이 없습니다. pstree -l출력을 호출하고 구문 분석할 수 있습니다 .

A가 B를 분기하고 B가 C를 분기한 다음 B가 죽으면 A와 C를 연결할 수 있는 부모-자식 관계가 더 이상 남지 않는다는 점을 명심하세요.

이러한 모든 프로세스를 종료하는 방법이 있을 수 있지만 너무 일치할 수 있다는 점에 주의하세요.

음수 프로세스 ID를 에 전달하면 kill전체가 종료됩니다.프로세스 그룹. 이는 원자적이므로 실행 중인 프로세스 중 하나가 포크되는 경우에도 작동합니다 kill. 이는 자신을 자신의 그룹에 배치하지 않은 프로세스만 종료하고 상위 프로세스와 다른 프로세스가 동일한 프로세스 그룹에 있는 경우에도 종료합니다. ps -o pgid …프로세스의 프로세스 그룹 ID를 보려면 실행하세요 .

종료하려는 모든 프로세스에 특정 파일이 열려 있는 경우 다음을 사용하여 fuser -k /some/file종료 할 수 있습니다.모두이 파일이 열려 있는 프로세스.

Linux의 또 다른 옵션은 다음과 같습니다.자신의 PID 네임스페이스에서 프로세스를 실행합니다.. 그런 다음 네임스페이스 내에서 의사 PGID -1을 종료하여 전체 네임스페이스를 종료할 수 있습니다.

관련 정보