«There is 1 zombie process» в системе найден зомби процесс

При подключении по SSH к Ubuntu 13.04 desktop выдало сообщение о присутствии в системе зомби процесса

Попробуем разобраться

Что такое зомби-процесс

Проце́сс-зо́мби, зо́мби (англ. zombie process, англ. defunct process) — дочерний процесс в Unix-системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.

http://ru.wikipedia.org

У нас есть три варианта:

  1. исправить родительский процесс
  2. убить его
  3. оставить всё как есть

Заметим, что зомби-процессы — это всего лишь дополнительная строчка в процессах системы. Зомби не занимают памяти, но блокируют записи в таблице процессов, размер которой ограничен для каждого пользователя и системы в целом.

Как найти зомби-процесс

Вывести все процессы в системе

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

Документация и ссылки по зомби-процессам для вкуривания:

  1. http://ru.wikipedia.org/wiki/процесс-зомби
  2. http://www.k-max.name/linux/processy-v-linux/
  3. http://en.wikipedia.org/wiki/Procfs
  4. http://ru.wikipedia.org/wiki/Procfs
Share

You may also like...

1 Response

  1. Приветствую.
    ИМХО, не описаны некоторые моменты, достойные внимания:
    1. процессы зомби появляются либо при проблемах с железом, либо при некорректной работе ПО. Соответственно, если данные процессы появляются один-два и более раз, то нужно искать лечение либо в апдейтах, либо в тесте и замене неисправного железа.
    2. Убив родителя зомби, с 99% вероятности зомби останется существовать в системе. В большинстве случаев зомби просто не имеет ни родителей, ни потомков. Помогает только перезагрузка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *