Я пытаюсь kill 31216 31617
,но после 10 раз этот процесс все еще выживает.
Зачем?
Есть ли способ заставить его умереть?
root 31216 1 0 10:49 ? 00:00:00 nginx: master process /root/nginx-1.0.2/objs/nginx -c /root/nginx-1.0.2/conf/nginx.conf
nobody 31217 31216 0 10:49 ? 00:00:00 [nginx] <defunct>
Из человек страница:
Команда kill отправляет указанный сигнал указанному процессу или группе процессов. Если сигнал не указан, отправляется сигнал TERM. Сигнал TERM завершает процессы, которые не улавливают этот сигнал. Для других процессов может потребоваться использование сигнала KILL (9), поскольку этот сигнал не может быть перехвачен.
В Unix и Unix-подобных компьютерных операционных системах процесс зомби или несуществующий процесс - это процесс, который завершил выполнение, но все еще имеет запись в таблице процессов. Эта запись по-прежнему необходима, чтобы позволить процессу, запустившему процесс (теперь зомби), прочитать его статус выхода. Термин «процесс зомби» происходит от общепринятого определения зомби - человек-нежить. В метафоре этого термина дочерний процесс «умер», но еще не «пожат». Кроме того, в отличие от обычных процессов, команда kill не влияет на зомби-процесс.
Источник : вики
РЕДАКТИРОВАТЬ:
Чтобы удалять зомби из системы, Сигнал SIGCHLD могут быть отправлены родителю вручную с помощью команды kill. Если родительский процесс по-прежнему отказывается пожать зомби, следующим шагом будет удаление родительского процесса. Когда процесс теряет своего родителя, init становится его новым родителем. Init периодически выполняет системный вызов wait, чтобы собрать всех зомби с init в качестве родительского.
Источник : вики
Когда вы убиваете процесс с помощью kill pid
, вы отправляете SIGTERM. Иногда процесс застревает в состоянии, когда он не слушает сигналы. Когда это произойдет, попробуйте kill -9 pid
и это, вероятно, убьет его навсегда.
В этом случае несуществующий процесс (31217) не может быть уничтожен, но родительский процесс (31216) должен умереть и забрать с собой дочерний процесс.
Процесс, который в настоящее время выполняет непрерывный системный вызов (например, выполняется код ядра), не может быть уничтожен. Вы можете использовать strace или аналогичный инструмент, чтобы узнать, где он находится, и попытаться его снять.