Я запустил свою программу на переднем плане (программа-демон), а затем убил ее 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]
ps -o ppid 1163
говорит? То есть кто является родителем 1163? Это процесс, который должен быть прекращен.Ответы:
Зомби уже мертв, поэтому вы не можете его убить. Чтобы убрать зомби, его должен ждать его родитель, поэтому убийство родителя должно сработать, чтобы уничтожить зомби. (После того, как родитель умирает, зомби будет унаследован pid 1, который будет ждать его и очистить свою запись в таблице процессов.) Если ваш демон порождает детей, которые становятся зомби, у вас есть ошибка. Ваш демон должен замечать, когда его дети умирают, и
wait
по ним определять свой статус выхода.Пример того, как вы можете отправить сигнал каждому процессу, который является родителем зомби (обратите внимание, что это очень грубый процесс и может убить процессы, которые вы не намереваетесь. Я не рекомендую использовать этот тип кувалды):
источник
ps aux
?kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}' | sort -u)
PPid
ряду, если выcat /proc/<pid>/status
Вы можете очистить процесс зомби, убив его родительский процесс с помощью следующей команды:
источник
grep
не обязательно.ps ... | awk '/[zZ]/{print $2}'
Я попытался:
это будет работать :)
источник
Нашел по адресу http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Вот отличный совет от другого пользователя (Thxs Bill Dandreta): иногда
не убьет процесс. Бегать
4-е поле - родительский процесс, убейте всех родителей зомби, и зомби умрет!
пример
18581
,18582
,18583
Зомби -не имеет никакого эффекта
удаляет зомби.
источник
init
меня, и теперь я ничего не могу сделать и вынужден перезапускаться ... процесс зомби - это Java, занимающий 3,4 ГБ из 4 ГБ ОЗУЯ попытался
и это работает для меня.
источник