Как перезапустить запущенную OS X без перезагрузки?

20506
hatmatrix

Когда я запускаю Zotero / Firefox, они часто дают сбой, и я остаюсь с процессами зомби; после этого я не могу открыть новые экземпляры Zotero или Firefox. Я хочу избавиться от этих процессов зомби, а не перезагрузки, поэтому для <pid>процесса зомби,

$ ps -p <pid> -o ppid= 

дает мне <parent_pid>и

ps aux | awk -v PID=<parent_pid> '$2 == PID ' 

говорит мне, что родительский процесс /sbin/launchdдля пользователя crippledlambda.

Есть ли способ перезапустить это, не убивая мою систему?

sudo kill -1 <parent_pid> 

ничего не делает. Я попытался написать это в сценарии и запустить его с sudo:

for i in `launchctl list | grep launchd | awk -v PID=<parent_pid> '$1==PID { print $NF }'`; do `launchctl stop $i && launchctl start $i` ; done 

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

13
Почему вы убиваете launchd вместо самих оставшихся процессов? launchd является основной частью сеанса пользователя; даже если бы вы могли перезапустить его, новый экземпляр не был бы родительским для всех * других * процессов, за которые он отвечает ... таких как Finder, Dock и т. д. Gordon Davisson 11 лет назад 0
@ Гордон, ты не можешь убить процессы зомби, поэтому ты должен идти за родителем, если я что-то упустил. hatmatrix 11 лет назад 0
Являются ли они истинными [зомби] (http://en.wikipedia.org/wiki/Zombie_process) (то есть процессы, которые вышли, но чей статус выхода не был прочитан)? Если это так, то что-то гораздо более глубокое неверно, так как `launchd` всегда должен немедленно прочитать статусы выхода своих детей. Если они не настоящие зомби, то вы должны их убивать. В любом случае, уничтожение `launchd` вызовет больше проблем, чем решит. Gordon Davisson 11 лет назад 0

2 ответа на вопрос

15
Mena Ortega

Правильный способ остановить и запустить демоны запуска - это запуск launchctl unload .

Например:

Вы можете остановить службу демона запуска, используя подкоманду unload в launchctl .

$ sudo launchctl unload /System/Library/LaunchDaemons/<daemon name>.plist 

Чтобы запустить отключенный или остановленный демон запуска:

$ sudo launchctl load /System/Library/LaunchDaemons/<daemon name>.plist 

★ Будьте осторожны с отключением демонов запуска - особенно официальных Apple; потенциально она может сделать вашу систему не загружаемой, пока вы не запустите ее в безопасном режиме и не включите их вручную. Вы не убивает launchctl, как обычный процесс, потому что он может потенциально убить вашу систему, как вы испытали.

> Более подробная информация о launchctl здесь . (Страница руководства по запуску Apple)

Извините, это `com.apple.bsd.launchdadd.plist`? Я не вижу `launchd` точно. И спасибо за предупреждение ... hatmatrix 11 лет назад 0
Для дальнейшего использования эти команды также работают с `scrun simctl spawn sudo launchctl выгрузить ... `. Файлы plist находятся в каталоге `$ (xcode-select -p) / Platforms / iPhoneSimulator.platform / Developer / SDKs / iPhoneSimulator.sdk / System / Library / LaunchDaemons /` Leo Natan 7 лет назад 0
1
ajostergaard

Со страницы запуска launchd:

Вы не можете вызвать launchd напрямую.

Следовательно, даже если бы вы могли остановить это, вы не смогли бы запустить его, поэтому ответ таков, что пути нет.

Почему отрицательный голос? Мой пост правильно отвечает на заданный вопрос. Разумеется, другой пост более конструктивен, но на самом деле он не отвечает на реальный вопрос в соответствии с названием поста! ajostergaard 6 лет назад 0
Другой пост действительно отвечает на вопрос. DavidPostill 6 лет назад 0
Нет, это говорит о том, как перезапустить демонов, которые не запустились. ajostergaard 6 лет назад 1
что угодно. В любом случае, жалобы на отрицательные голоса не являются конструктивными. Очевидно, люди думают, что ваш ответ бесполезен. DavidPostill 6 лет назад 0
LOL - и именно такое отношение, что точность больше не имеет значения, объясняет медленное снижение качества SO. С новым годом! ajostergaard 6 лет назад 1