Как убить процесс зомби на Mac

13

Как убить процесс зомби или найти его родительский процесс на Mac с помощью терминала?

eFrane
источник
3
@soandos Не дубликат, так как эта тема не о зомби. Ни один из killсигналов не работает для зомби IIRC. У меня было это раньше.
Даниэль Бек
Обычно можно убить зомби, если известен родительский процесс, но для этого тоже необходимо убить этого, что не всегда является приятным выбором. Поэтому мне интересно, есть ли другое решение для этого.
eFrane,

Ответы:

16

Hack Saw говорит:

К сожалению , похоже, что убийство зомби - это убийство родителя , и если родителем является / sbin / launchd, вы можете убить его только с перезагрузкой.

Было бы очень плохой идеей убить launchd, но вы можете сказать это HUP.

Пытаться sudo kill -s HUP 1

Это приведет launchdк повторной инициализации без перезапуска. Это работало для меня в прошлом (в отношении удаления записей зомби).

Sean
источник
3

К сожалению , похоже, что убийство зомби - это убийство родителя , и если родителем является / sbin / launchd, вы можете убить его только с перезагрузкой.

Я получаю зомби от использования Xcode и останавливаю симулятор, и он передает зомби моему личному / sbin / launchd, который не исчез, когда я вышел из системы.

Команда ps -xo pid, ppid, stat, покажет вам ваши процессы с их родительским идентификатором во втором столбце.

Hack Saw
источник
1

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

Они не замедляют работу вашей машины, и вы можете оставить их там (это просто записи в таблице процессов).

Существует максимальное количество процессов (вы можете проверить это с помощью sysctl kern.maxproc), и процессы-зомби уменьшат его (по мере их подсчета).

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

Matteo
источник
«Должны быть удалены», но они не всегда. Xcode ужасно покидает зомби-процессы, и они не очищаются, даже если Xcode умирает / выходит / убивается.
JRG-Developer
@ JRG-Developer Я согласен, но они не являются проблемой. Они не потребляют никаких ресурсов.
Маттео
2
На самом деле они представляют собой проблему, когда создается слишком много, и fork не может запустить новый процесс, и вы вынуждены перезагрузиться.
Адам
2
Они являются проблемой, когда вы хотите перезапустить сбойный процесс и использовать его снова, но не можете без перезагрузки.
MarcusJ
4
Когда приложение попадает в это состояние, вы не можете перезапустить его, пока старая запись не будет очищена. Он не использует никаких ресурсов, но загрязнение таблицы препятствует запуску нового экземпляра, поэтому вы блокируетесь до перезагрузки.
Джордж