Як перезапустити запущену ОС 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

і це очевидно (?) залишає у мене невідповідний сірий екран, тому мені доведеться все-таки перезавантажуватися. Заздалегідь дякую за ваші пропозиції.


Чому ти вбиваєш запущених, а не самих процесів, що залишилися? запуск - основна частина сеансу користувача; навіть якщо ви могли б перезапустити його, новий екземпляр не був би батьком усіх інших процесів, за які він відповідає ... такі речі, як Finder, Dock тощо.
Гордон Девіссон,

@Gordon, ти не можеш вбити процесів зомбі, тому ти повинен піти за батьком, якщо я щось не пропущу.
hatmatrix

Це справжні зомбі (тобто процеси, які вийшли, але статус виходу не було прочитано)? Якщо вони є, щось набагато глибше помиляється, оскільки launchdзавжди слід негайно читати статуси виходу своїх дітей. Якщо вони не справді зомбі, то ви повинні їх вбивати. У будь-якому випадку вбивство launchdспричинить більше проблем, ніж вирішує.
Гордон Девіссон

Відповіді:


17

Правильний спосіб зупинки та запуску демонів запуску - це startctl unload .

Наприклад:

Ви можете зупинити службу запуску демона з допомогою вивантаження субкоманди launchctl .

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

Щоб запустити інвалід або зупинити запуск демона:

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

★ будьте обережні з відключенням демонів запуску випадково - особливо офіційних Apple; це може потенційно зробити вашу систему незавантаженою, поки ви не запустите в безпечному режимі та не ввімкніть їх вручну. Ви не вбиваєте запуск, як звичайний процес, тому що він може вбити вашу систему, як ви пережили.

> Більше інформації про startctl тут . (Сторінка користувача Apple startctl)


Вибачте, це com.apple.bsd.launchdadd.plist? Я не бачу launchdточно. І дякую за попередження ...
hatmatrix

Для подальшого ознайомлення ці команди також працюють scrun simctl spawn <sim_id> sudo launchctl unload …. Файли плістів знаходяться під$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Лео Натан

3

Зі сторінки запуску man:

Ви не можете викликати запуск безпосередньо.

Отже, навіть якби ви могли це зупинити, ви б не змогли його запустити, тому відповідь полягає в тому, що немає способу.


1
Чому потік? Мій пост правильно відповідає на поставлене запитання. Додана інша посада є більш конструктивною, але вона фактично не відповідає на власне питання відповідно до назви посади!
ostergaard

Інша публікація відповідає на питання.
DavidPostill

2
Ні, це не так, це говорить про те, як перезапустити демон не запустився сам.
ostergaard

3
хаха - і саме таке ставлення, що точність вже не має значення, пояснює повільне падіння якості ТО. Щасливого Нового року!
ostergaard

1
Шкода, що я не можу заперечувати коментарі. Не тільки ця відповідь правильна, інша відповідь взагалі не відповідає фактично. Мова йде не про демонів, розпочатих запуском, а про зомбі-процеси, успадковані запуском, коли насильно припинено безвідповідальний процес. У мене є та ж проблема, і немає кривавого демона, щоб вбити, оскільки це браузер, який запускає помилкову поведінку при запуску. Якщо відповісти «що завгодно», моя кров кипить, як ті ж люди, які вважали відповідь корисною, не розуміють питання в першу чергу, і це гірше на порядок.
SaltwaterC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.