Что такое зомби-процесс:
Это процесс, который завершился, но не весь он немедленно удаляется из памяти, так как его дескриптор процесса остается в памяти.
Каким должно быть нормальное поведение процесса:
После завершения процесса состояние процесса принимает следующее
EXIT_ZOMBIE
и родительский процесс уведомляется о том, что его дочерний процесс умер с помощью метода
SIGCHLD
сигнал.
Затем родительский процесс должен запустить метод
wait()
Для системного вызова для считывания состояния выхода мертвого процесса и другой информации. После
wait()
вызывается, зомби-процесс удаляется из памяти. Это происходит быстро, поэтому вы не увидите, как зомби-процессы накапливаются в вашей системе. Но в тех случаях, когда мы видим скопление нескольких зомби-процессов, это ситуация, когда программный код не эффективен.
Как найти зомби-процессы:
Выполнение команды
top
Выполнение команды
ps -ef | grep defunct
Как прекратить накапливающиеся зомби-процессы:
В большинстве случаев зомби-процессы имеют один и тот же идентификатор родительского процесса.
Существует два способа удаления процесса:
- Отправьте
SIGCHLD
сигнал родительскому процессу.
Этот сигнал указывает родительскому процессу запустить команду wait()
системный вызов и очистка своих детей-зомби:
kill -s SIGCHLD <PPID>
Пример.
kill -s SIGCHLD 2201
- Завершение родительского процесса-зомби
kill -9 <PPID>
Пример.
kill -9 2201