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

14

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

$ ps -p <pid> -o ppid=

дает мне <parent_pid>и

ps aux | awk -v PID=<parent_pid> '$2 == PID {print $0}'

говорит мне, что родительский процесс /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

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

hatmatrix
источник
Почему вы убиваете launchd вместо самих оставшихся процессов? launchd является основной частью пользовательской сессии; даже если бы вы могли перезапустить его, новый экземпляр не был бы родителем всех других процессов, за которые он отвечает ... таких как Finder, Dock и т. д.
Гордон Дэвиссон
@ Гордон, ты не можешь убить процессы зомби, поэтому ты должен идти за родителем, если я что-то упустил.
hatmatrix
Являются ли они настоящими зомби (то есть процессами, которые вышли, но чей статус выхода не был прочитан)? Если это так, то что-то гораздо более глубокое неверно, поскольку launchdвсегда следует сразу же прочитать статусы выхода своих детей. Если они не настоящие зомби, то вы должны их убивать. В любом случае, убийство launchdвызовет больше проблем, чем решит.
Гордон Дэвиссон

Ответы:

17

Правильный способ остановить и запустить демоны запуска - это запускctctl 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
Для дальнейшего использования эти команды также работают scrun simctl spawn <sim_id> sudo launchctl unload …. Plist файлы находятся под$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Лео Натан
3

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

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

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

Остергаард
источник
1
Почему отрицательный голос? Мой пост правильно отвечает на заданный вопрос. Конечно, другой пост более конструктивен, но на самом деле он не отвечает на реальный вопрос в соответствии с названием поста!
Остергаард
Другой пост действительно отвечает на вопрос.
DavidPostill
2
Нет, это говорит о том, как перезапустить демонов, которые не запустились.
ostergaard
3
LOL - и именно такое отношение, что точность больше не имеет значения, объясняет медленное снижение качества SO. С новым годом!
ostergaard
1
Жаль, что я не могу понизить комментарии. Мало того, что этот ответ является правильным, другой ответ вообще не отвечает на этот вопрос. Речь идет не о демонах, запускаемых launchd, а о процессах-зомби, унаследованных от launchd, когда неотвечающий процесс был принудительно завершен. У меня та же проблема, и я не убиваю кровавого демона, потому что это браузер, который вызывает некорректное поведение в launchd. От ответа «что угодно» у меня кипит кровь, потому что те же самые люди, которые нашли ответ полезным, не понимают вопрос в первую очередь, и это на порядок хуже.
SaltwaterC