Как убить процессы, не отвечающие на убийство -9

9

Я вижу процессы на моем SGI Altix 450 с SLES 10.1, которые, по-видимому, перестают работать (то есть не предоставляют дальнейшие выходные данные в своих журналах в течение нескольких часов). На этом этапе я хочу завершить процесс, вызывающий оскорбления, чтобы перезапустить его. Верх показывает, что процесс находится в состоянии (R). Хотя, когда я пытаюсь убить, ничего не происходит. Даже когда я использую kill -9, он все еще задерживается. В этом случае, что я могу сделать, кроме перезагрузки машины?

Джаред Браун
источник
2
Это определенно один и тот же идентификатор процесса? Это не значит, что вы убиваете процесс, а какой-то демон запускает процесс с тем же именем?
СК.

Ответы:

9

Возможно, что процесс завершен, но ожидает, пока родительский объект соберет свое возвращаемое значение. В этом случае после того, как он будет убит, он будет в состоянии «Z», а не «R». В этом случае вы должны найти ppidпроцесс, использующий psкоманду, и также уничтожить родительский процесс (если вы действительно уверены, что он не вызовет никаких проблем).

Другой случай может быть, что по какой-то причине процесс перезапускается после того, как его убили как tty В этом случае идентификатор процесса должен меняться каждый раз, когда вы делаете kill -9. Посмотрите, меняется ли идентификатор процесса каждый раз, когда вы пытаетесь его убить.

Саураб Баржатия
источник
Я верю, что пытаюсь убить родительский процесс. Это родительский процесс, который находится в состоянии (R). Pstree подтверждает это. Все дочерние процессы находятся в (Z) состояниях зомби. Ppid остается статичным, поэтому я не верю, что он просто перезапускается.
Джаред Браун
Если вы уничтожите родительский процесс (и его родительский процесс и т. Д.), Тогда init станет родительским для дочерних процессов, которые находятся в состоянии 'Z', и соберет их возвращаемое значение. Таким образом, лучший способ удалить дочерние элементы «Z», родительские элементы которых не принимают возвращаемого значения, - это также уничтожить родительский элемент, чтобы init стал родительским для мертвых дочерних процессов.
Саураб Баржатия
Это проблема, с которой я столкнулся. Отправка сигнала -9 через kill родительскому процессу не завершает его.
Джаред Браун
1
Отправка SIGHUP родителю иногда достаточно. Вам не всегда нужно убивать родителя.
Томас
2
Прости, SIGCHLD. (слишком рано утром)
Томас
2

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

перезагрузите коробку, или позвольте процессу сидеть без дела.

Интересно, можно ли остановить процесс с помощью kill -STOP {PID}, чтобы он не потреблял больше ресурсов процессора?

Перезапуск должен быть возможен даже с другим остановленным процессом, но для этого может потребоваться порт списка или сегмент общей памяти, который все еще используется другим процессом.

ericslaw
источник
1
Разве процесс, ожидающий завершения работы NFS или какой-либо функции ввода-вывода, не будет в состоянии (D)? Эти процессы находятся в (R) состоянии.
Джаред Браун
Это именно то, что происходит со мной иногда, когда я делаю lsкоманду на монтировании s3fs. lsПроцесс не будет убивать даже , kill -9пока я не заставить размонтирование сumount -l
Marco Марсала
0

Вы уже проверили dmesg? Я видел это после паники ядра; единственный способ восстановить это перезагрузить компьютер (желательно в ближайшее время), а затем получить исправленное ядро.

Обычные неубиваемые процессы будут в состоянии D, а не в R.

derobert
источник
Можно ли что-либо сделать с жесткими процессами в состоянии D, кроме перезагрузки? ppid = 1
проф. Мориарти