좀비를 제거 하는 유일한 방법 wait()
은 종료 상태를보고 할 수 있도록 부모를 만드는 것 입니다. SIGCHLD
부모가 제대로 작성되었다고 가정하면 부모에게 보내서 그렇게 할 수 있습니다 .
당신이 좀비가 있다면 그것은 일반적으로 부모가 의미 NOT (아이가 이미 전송하기 때문에 제대로 작성 SIGCHLD
다음 단계는 부모를 죽일 것입니다, 그래서이 죽고 좀비가되었을 때 부모에). ( 옵션 포함) 과
같은 도구를 pstree
사용하면 -p
좀비의 계보를 표시하여 어떤 프로세스가 부모인지 알 수 있습니다.
부모가 죽으면에 의해 좀비가 입양 될 init
것인데, 이는 항상 wait()
아이들이 죽을 수 있도록하고 , 입양 한 모든 좀비를 행복하게 죽일 것입니다.
상위 프로세스가 실제로 init
(PID 1) 이미있는 경우 절대 발생하지 않는 상황에 처해 있습니다. 에 보낼 SIGCHLD
수 init
는 있지만 실제로 그렇게 할 필요는 없으며, 그래도 작동하지 않으면 시스템 init
이 손상되어 작업을 수행하지 않기 때문에 재부팅해야합니다 .
(이것은 "shotgun"옵션입니다.)
일부 나보다 더 창의적인 사람 이 부모 프로세스를 죽이고 피하려는 경우이 옵션으로 올라와있다 :
- 좀비 및 부모 프로세스의 PIDS 결정
(이 예에서는 좀비가 PID 3101이고 부모가 PID 3100이라고 가정합니다)
- 최대 화재
gdb
및 attach
부모 :
attach 3100
waitpid
좀비를 불러주세요 :
call waitpid(3101,0,0)
- 부모 (
detach
) 에서 분리 하고 디버거를 종료하십시오.
(이것은 잘 조정 된 저격 소총입니다.)