[linux] 좀비 프로세스를 죽이는 방법

포 그라운드에서 프로그램을 시작한 후 (데몬 프로그램)으로 프로그램을 종료 kill -9했지만 좀비가 남아서으로 프로그램을 종료 할 수 없습니다 kill -9. 좀비 프로세스를 죽이는 방법?

좀비가 죽은 프로세스 (이미 종료) 인 경우 ps aux? 의 출력에서 ​​제거하는 방법은 무엇입니까?

root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# ps aux | grep anyprogram
 1163 root      2552 S    anyprogramd
 1167 root      2552 S    anyprogramd
 1169 root      2552 S    anyprogramd
 1170 root      2552 S    anyprogramd
10101 root       944 S    grep anyprogram
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [anyprogramd]



답변

좀비는 이미 죽었으므로 죽일 수 없습니다. 좀비를 청소하려면 부모가 기다려야하므로 부모를 죽이면 좀비를 제거해야합니다. (부모가 죽은 후에는 좀비가 pid 1에 의해 상속되어 대기하고 프로세스 테이블에서 해당 항목을 지 웁니다.) 데몬이 좀비가되는 자식을 생성하는 경우 버그가 있습니다. 데몬은 자식이 언제 죽었는지 알면서 wait종료 상태를 확인해야합니다.

좀비의 부모 인 모든 프로세스에 신호를 보내는 방법의 예 (이것은 매우 조잡하고 의도하지 않은 프로세스를 죽일 수 있습니다. 이런 종류의 썰매 망치를 사용하지 않는 것이 좋습니다) :

# Don't do this.  Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')


답변

다음 명령으로 상위 프로세스를 종료하여 좀비 프로세스를 정리할 수 있습니다.

kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')


답변

나는 시도했다 :

ps aux | grep -w Z   # returns the zombies pid
ps o ppid {returned pid from previous command}   # returns the parent
kill -1 {the parent id from previous command}

이것은 작동합니다 🙂


답변

http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/ 에서 찾았습니다 .

2) 다른 사용자의 유용한 팁 (Thxs Bill Dandreta) : 때때로

kill -9 <pid>

프로세스를 종료하지 않습니다. 운영

ps -xal

네 번째 필드는 부모 프로세스이며, 좀비의 부모와 좀비 모두를 죽입니다!

4 0 18581 31706 17 0 2664 1236 wait S ? 0:00 sh -c /usr/bin/gcc -fomit-frame-pointer -O -mfpmat
4 0 18582 18581 17 0 2064 828 wait S ? 0:00 /usr/i686-pc-linux-gnu/gcc-bin/3.3.6/gcc -fomit-fr
4 0 18583 18582 21 0 6684 3100 - R ? 0:00 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quie

18581, 18582, 18583좀비는 –

kill -9 18581 18582 18583

효과가 없습니다.

kill -9 31706

좀비를 제거합니다.


답변

나는 시도했다

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

그리고 그것은 나를 위해 작동합니다.


답변