5

У меня на MacBook Pro работает CrashPlan, и он вышел из строя. По сути, это вызвало взрывную бомбу. К счастью, у меня было открытое окно терминала и я смог запустить эту команду:

sudo launchctl unload /Library/LaunchDaemons/com.crashplan.engine.plist

Таким образом, постоянное повторное нерест прекратилось. Но у меня все еще есть более 900 Java-процессов, которые ничего не делают, кроме как подталкивают меня к максимальному количеству процессов. Я бы предпочел не перезагружать компьютер, так как у меня много файлов с открытым кодом, веб-страниц и т.д. Есть ли простой способ заставить систему пожинать зомби? Я бы убил родительский процесс, но все они запускаются с помощью launchd aka PID 1. В этот момент было бы лучше перезапустить.

Я пытался:

sudo kill -9 <PID>
sudo kill -9 java
sudo killall -9 java    

Есть ли способ убить зомби раз и навсегда без необходимости убивать launchd, чтобы сделать это? Или мне придется перезапустить, чтобы пережить этот зомби-апокалипсис?

2 ответа2

4

Зомби уже мертв. Не думайте о процессе, думайте только о слоте процесса. Убивать нечего, поэтому kill -9 работает так же, как и kill -1, что ничего не значит.

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

В традиционной UNIX pid 1 - это init, который всегда получает дочерние элементы. Я думаю, что launchd закодирован так же. Если у вас есть зомби с PPID как 1, у вас практически нет других возможностей, кроме перезагрузки.

2

К сожалению, сделать это невозможно. Процессы зомби обычно доброкачественные, потому что их родитель в конечном итоге пожнет их, и они не потребляют ресурсы ... но они способствуют максимальному количеству процессов, которое ваша система позволит (я думаю, это зависит от объема оперативной памяти, установленной на компьютере). , но я не могу найти документацию для этого в Lion). Экземпляры JVM принадлежали launchd (PID 1 на Mac), и нет безопасного способа убить launchd и перезапустить его, не убив при этом всех детей launchd. Который был бы всем минус ядро.

Это может относиться к любому сбежавшему LaunchAgent; все процессы будут дочерними для запуска, и это вызовет те же проблемы, с которыми я столкнулся. Я не верю, что каждый экземпляр JVM, запускаемый каждым битом Java-кода, порождается launchd, но так случилось, что CrashPlan использует Java, и у меня были такие, что засоряли мою систему.

Я предполагаю, что урок, который нужно усвоить здесь: не раскладывайте бомбу и держите под рукой окно терминала. Перезапуск прояснил зомби, так что все хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .