Как перезапустить запущенную OS X без перезагрузки?
Когда я запускаю 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
и это, очевидно (?) оставляет меня с серым экраном, который не отвечает, поэтому мне все равно приходится перезагружаться. Заранее спасибо за ваши предложения.
2 ответа
Правильный способ остановить и запустить демоны запуска - это запуск 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)
Со страницы запуска launchd:
Вы не можете вызвать launchd напрямую.
Следовательно, даже если бы вы могли остановить его, вы не смогли бы его запустить, поэтому ответ таков: пути нет.