pkill은 프로세스의 직접적인 자손인 프로세스를 종료하지 않습니다.

pkill은 프로세스의 직접적인 자손인 프로세스를 종료하지 않습니다.

다음과 같은 일련의 프로세스를 종료하고 싶습니다.

PID  PPID
100  XXX
101  100
102  101

PID 100과 101을 사용하면 pkill -P 100예상대로 죽는데 PPID이기 때문에 init에 102가 주어집니다.

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을 종료하여 전체 네임스페이스를 종료할 수 있습니다.

관련 정보