При подключении по SSH к Ubuntu 13.04 desktop выдало сообщение о присутствии в системе зомби процесса
Попробуем разобраться
Что такое зомби-процесс
Проце́сс-зо́мби, зо́мби (англ. zombie process, англ. defunct process) — дочерний процесс в Unix-системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.
http://ru.wikipedia.org
У нас есть три варианта:
- исправить родительский процесс
- убить его
- оставить всё как есть
Заметим, что зомби-процессы — это всего лишь дополнительная строчка в процессах системы. Зомби не занимают памяти, но блокируют записи в таблице процессов, размер которой ограничен для каждого пользователя и системы в целом.
Как найти зомби-процесс
Вывести все процессы в системе
ps aux
Вывести название и PID зомби-процесса
ps ax | grep Z
Вывести PID зомби-процесса
ps aux | awk '{ print $8 " " $2 }' | grep -w Z
Как удалить зомби-процесс
Узнав PID зомби-процесса, можно попробовать его убить выполнив команду
sudo kill -9 29559
Если убить зомби-процесс не получается, что вероятнее, так как они уже мертв. Можно убить родительский процесс или перезапустить службу. Для этого необходимо
найти родительский процесс для зомби
cat /proc/29559/status|grep PPid
Теперь знаю PID родителя, мы можем найти его название
ps ax | grep 3566
Теперь пробуем завершить родительское приложение для зомби-процесса, если не получается выполняем
kill -9 3566
Для поиска нужных процессов также удобно пользоваться командой pstree, например:
pstree -Gpl 3566
Скрипт поиска и удаления зомби-процессов
#!/bin/bash zombies=(`ps ax |awk '{print $3" "$1}' |grep -e ^'Z ' |sed 's/Z //1'`) for zombie in ${zombies[@]} do echo "Found a zombie process "`awk '{print $2}' /proc/$zombie/stat`" [pid:$zombie]" parent="`awk '{print $4}' /proc/$zombie/stat`" echo "Asking parent process "`awk '{print $2}' /proc/$parent/stat`" [pid:$parent] to come quietly..." kill -SIGCHLD $parent sleep 10 # This seems awfully patient if [ -f /proc/$parent/stat ]; then echo "Asking not so nicely" kill -9 $parent fi sleep 1 if ! [ -f /proc/$zombie/stat ]; then echo "Zombie vanquished" fi done
Документация и ссылки по зомби-процессам для вкуривания:
- http://ru.wikipedia.org/wiki/процесс-зомби
- http://www.k-max.name/linux/processy-v-linux/
- http://en.wikipedia.org/wiki/Procfs
- http://ru.wikipedia.org/wiki/Procfs
Приветствую.
ИМХО, не описаны некоторые моменты, достойные внимания:
1. процессы зомби появляются либо при проблемах с железом, либо при некорректной работе ПО. Соответственно, если данные процессы появляются один-два и более раз, то нужно искать лечение либо в апдейтах, либо в тесте и замене неисправного железа.
2. Убив родителя зомби, с 99% вероятности зомби останется существовать в системе. В большинстве случаев зомби просто не имеет ни родителей, ни потомков. Помогает только перезагрузка.