Назад | Перейти на главную страницу

init не убивает зомби

В моей системе есть несколько зомби-процессов. Я убил родителя этих зомби, надеясь, что init возьмет на себя управление и освободит ресурсы (много сокетов в CLOSE_WAIT). Однако init не удаляет эти процессы из системы:

#ps ax
...
17051 ?        Zl   8498:24 [impalad] <defunct>
...

# ps -o ppid= -p 17051
    1

Есть ли способ удалить зомби без перезагрузки?

ОБНОВИТЬ:

я пробовал kill -s SIGCHLD 1. Это не помогло.

Вы не можете убить неработающий процесс. По чужим словам:

http://www.linuxquestions.org/questions/suse-opensuse-60/howto-kill-defunct-processes-574612/

Вы не можете убить несуществующий процесс (он же зомби), поскольку он уже мертв. Это не требует никаких ресурсов, так что это не проблема, но если вы действительно хотите, чтобы он исчез из таблицы процессов, вам нужно, чтобы его родительские процессы пожинали его. «pstree» должен дать вам иерархию процессов, а «kill -1» иногда бывает достаточно для работы.

Поскольку родительский идентификатор вашего процесса - это init (1), вы не можете ничего делать, кроме перезагрузки.

https://unix.stackexchange.com/questions/11172/how-can-i-kill-a-defunct-process-whose-parent-is-init

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

Я не могу это проверить, но этот парень говорит, что вы можете избавиться от неработающего процесса вот так:

Что такое зомби-процесс и как его убить?

There is already an accepted answer, however: you CAN kill the zombie process. Attach with the debugger to the parent process and call waitpid function. E.g.: - let's assume that the parent has PID=100, the zombie process has PID=200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

У этого парня была проблема с неработающим процессом, который, казалось, продолжал работать. Я не понимаю, но вот ссылка. В таком случае kill -9 pid утверждается, что работает.

Зомби-процессы все еще живы и работают нормально, но их нельзя убить?

Здесь вы можете узнать больше об этой проблеме.

https://github.com/nu11secur1ty/All-Stages-of-Linux-Booting-Process-/blob/master/Zombie%20Process/explanation.md

BR