Show zombie process linux

Выполняю установку, настройку, сопровождение серверов. Для уточнения деталей используйте форму обратной связи

Что же это такое?
Это дочерний процесс в Unix-системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения. Процесс при завершении освобождает все свои ресурсы (за исключением PID — идентификатора процесса) и становится «зомби» — пустой записью в таблице процессов, хранящей код завершения для родительского процесса.
Система уведомляет родительский процесс о завершении дочернего с помощью сигнала SIGCHLD. Предполагается, что после получения SIGCHLD он считает код возврата с помощью системного вызова wait(), после чего запись зомби будет удалена из списка процессов. Если родительский процесс игнорирует SIGCHLD (а он игнорируется по умолчанию), то зомби остаются до его завершения.

А теперь возникают вопросы: как же всё-таки их найти и убить? Найти их очень просто. Вот несколько вариантов:

1)
top | grep zombie
225 processes: 1 running, 222 sleeping, 2 zombie

2)
ps aux | grep -w Z
root 3994 0,0 0,0 0 0 ?? Z 13июн11 16:23,02
root 3995 0,0 0,0 0 0 ?? Z 13июн11 13:43,28

3)
ps -alx | awk ‘$10

Что касается «убийства», то их нельзя просто так убить. Самый правильный вариант — найти родительский процесс и перезапустить его. Некоторые могут посоветовать и перегрузиться, но это не выход.

Находим родительский процесс:

ps ajx | grep -w Z
root 3994 3992 3992 3992 0 Z ?? 16:23,02
root 3995 3992 3992 3992 0 Z ?? 13:43,28

3-я колонка как раз и показывает pid родительского процесса. Смотрим, что это за процесс:

ps auxww | grep 3992
root 3992 0,0 0,2 30664 9872 ?? Ss 13июн11 0:08,21 [exilog_agent] (perl5.12.3)

Собственно мы нашли виновника. Это exilog_agent. А дальше — либо просто прибиваем родительский процесс либо перезапускаем его:

#kill -9 3992
#top | grep zombie
#

Источник

Linux: Find and Kill Zombie Processes

Today we will learn about zombie processes. In particular, we will guide you to find and kill zombie processes on your Linux / Unix operating systems.

What is a zombie process?

On Linux / Unix operating systems, a defunc process (aka zombie process) is a system process that has completed its execution, however it still show on the system process table. In other words, it’s an empty process, that is not executing any task, but still exist and has a process ID.

Читайте также:  Mfc100 dll что это за ошибка как исправить windows 10

If there is a zombie process, there is a parent process around. And the same as in the movies, zombies do not react to normal ways of killing. On Unix / Linux it’s the same, you can’t kill the zombie, but you can kill the parent process, which will make the zombie process dissapear immediately.

Zombie processes can be found on almost any Unix / Linux operating system, and that also includes cPanel servers.

How can I list zombie processes on my system?

Zombies processes can be found by using the ps command, and piping a grep command with ‘defunc’ or ‘Z’ string in the “STAT” column.

Example: finding zombie processes using ps and grep.

Kill zombie processes

Now in order to kill the zombie process, just kill the 3572 process and it should be gone. Let’s use pstree command to fund out the parent process

The output should be something like:

This will show the pid of the of the parent of the zombie process. Now you need to kill the parent process.

All done, now you know how to find and kill zombie processes on Linux / Unix operating systems. Do you know other ways to find and kill zombie processes on Linux / Unix? Please share your knowledge with us.

Источник

Зомби процессы Linux

Каждая программа, которая выполняется в Linux, — это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби.

Зомби процессы Linux не выполняются и убить их нельзя, даже с помощью sigkill, они продолжают висеть в памяти, пока не будет завершён их родительский процесс.

Посмотреть такие процессы можно с помощью утилиты ps, здесь они отмечаются как defunct:

ps aux | grep defunct

Если вы попытаетесь убить такой процесс с помощью сигнала KILL, то ничего не выйдет:

Чтобы его завершить, нужно найти «родителя» этого процесса. Для этого используйте команду:

ps -xal | grep defunct

Здесь идентификатор родительского процесса находится в четвёртой колонке (PPID). Теперь мы можем послать ему сигнал завершения, и такого процесса в системе больше не будет:

Для большего удобства вы можете использовать утилиты top или htop, но принцип их действия будет аналогичным, поэтому я не буду здесь его рассматривать. Теперь вы знаете, что делать, если в вашей системе появились зомби процессы Linux.

Читайте также:  Asus k56cb драйвера для windows 10 64 bit

Источник

What is Zombie Process and Kill Zombie Process in Linux

In Linux OS, a zombie process or a defunct process is a finished (dead) process, but it has still occupied an entry in the process table. Normally, a child process that has completed its execution will send a SIGCHLD signal to the parent process which has created it. Then the parent process will send a wait system call through which it can read the child’s exit status. After receiving the wait system call, the child’s entry will get removed from the process table. In some cases, the parent may ignore the SIGCHLD signal which causes the finished process to still exist in the process table which makes it a zombie process. Sometimes, this is desirable for the parent process to ensure that it doesn’t allocate the same PID to another child.

When a process becomes dead, it will free up the memory and other resources allocated to it. So, a zombie process will not be using any resources at all, other than an entry in the process table. The problem may start only when a large number of zombie processes exist and system run out of PIDs. In this tutorial, we will see how a zombie process can be detected and terminated.

If the system generates large number of zombie processes, then it should be an application bug which needs to be checked for available patches to correct the problem.

Detecting zombie processes

You can find the zombie processes using Linux ps command. This command will list all processes with a “STAT” column. If the process is a zombie process, the STAT column will have the character “Z”. Using any of the following commands, you can find the zombie processes.

Handling zombie process

As zombie processes don’t consume any resources, you can ignore it if the server runs smoothly. But in the case of server facing heavy load, large number of zombie processes may become an issue. So, in order to get rid of the zombie processes we can consider any of the following methods.

1) Sending SIGCHLD signal to the parent process of zombie

Upon receiving SIGCHLD command, the parent process must send a wait system call which will remove the zombie process. This can be accomplished by executing the following command.

PPID is the PID of the parent process which invoked the zombie child process. You can execute the following command to find the PPID of a zombie process.

If the parent process explicitly ignores the SIGCHLD signal, then you should consider killing the parent process (step 2).

2) Killing the parent process

If the zombie processes are not able to get removed, you should kill the parent process or restart the service to get rid of the zombies. When a parent gets killed, all child processes will become the child process of ‘init process (PID 1)’. Init process will wait for the children to die by sending a wait signal which in turn removes the zombie processes. The parent process can be killed using the ‘kill’ command:

Читайте также:  Realtek s1220a mac os

Please provide your thoughts and suggestions on this article. Thanks for reading.

Источник

Зомби процессы в Linux

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

Функция fork запускает дочерний процесс, который попадает под контроль родительского процесса. Если родительский процесс получает сигнал о завершении дочернего процесса, но при этом игнорирует его (в возможные причины сбоя вдаваться не станем), то этот процесс становится зомби.

Стоит ли обращать на них своё внимание? Ответ: делать это совершенно не обязательно. Так как процесс уже был завершен, он перестал использовать системные ресурсы, но остался в системе. Самое разумное в этом случае – сделать вид, что его не существует, и продолжать работать с устройством, как ни в чем не бывало. Если пользователь попытается «уничтожить» зомби при помощи специальной команды «kill», у него ничего не выйдет, ведь этот процесс не выполняется. Это действие является бессмысленным, а потому процесс продолжит отображаться в системе.

Чтобы полностью убрать зомби, необходимо уничтожить или перезапустить его родительский процесс. Если есть такое желание, обратитесь к инструкции ниже.

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

Это можно сделать при помощи утилиты ps:

$ ps aux | grep defunct

Как обнаружить в системе «родителя»:

$ ps -xal | grep defunct

После того, как нашли родителя можно удалить зомби. Это единственный способ уничтожения зомби процесса. Прямые команды не удалят их. Найдите в колонке идентификатор «родителя». В приведенном примере он находится в 4-м столбце под номером 761.

С помощью команды «kill» пошлем сигнал завершения, чтобы зомби процесс прекратил своё существование в системе.

В вашем случае вместо 761 будет стоять другое значение. Его нужно правильно обнаружить.

Данные рекомендации созданы для тех пользователей, которые любят порядок во всем. Но еще раз напоминаем: зомби в операционной системе Линукс безвредны, и являются абсолютно логичным следствием ошибки.

Источник

Оцените статью