Wie starte ich launchd OS X neu, ohne neu zu starten?


14

Wenn ich Zotero / Firefox starte, stürzen sie oft ab und ich habe Zombie-Prozesse; Danach kann ich keine neuen Instanzen von Zotero oder Firefox mehr öffnen. Ich möchte diese Zombie-Prozesse loswerden, anstatt neu zu starten, also für <pid>den Zombie-Prozess,

$ ps -p <pid> -o ppid=

gibt mir das <parent_pid>und

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

sagt mir, der übergeordnete Prozess ist /sbin/launchdfür Benutzer crippledlambda.

Gibt es eine Möglichkeit, dies neu zu starten, ohne mein System zu beenden?

sudo kill -1 <parent_pid>

tut nichts. Ich habe versucht, dies in ein Skript zu schreiben und es auszuführen mit 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

und dies lässt mich offensichtlich (?) mit einem nicht reagierenden grauen Bildschirm zurück, so dass ich trotzdem neu starten muss. Vielen Dank im Voraus für Ihre Vorschläge.


Warum tötest du launchd anstelle der restlichen Prozesse selbst? launchd ist ein zentraler Bestandteil der Benutzersitzung. Selbst wenn Sie es neu starten könnten, wäre die neue Instanz nicht das übergeordnete Element aller anderen Prozesse, für die sie verantwortlich ist ... Dinge wie Finder, Dock usw.
Gordon Davisson

@ Gordon, du kannst keine Zombie-Prozesse beenden, also musst du den Eltern nachgehen, es sei denn, mir fehlt etwas.
Hatmatrix

Sind sie echte Zombies (dh Prozesse, die beendet wurden, deren Beendigungsstatus jedoch nicht gelesen wurde)? Wenn ja, stimmt etwas viel Tieferes nicht, da launchdimmer sofort die Ausgangszustände seiner Kinder abgelesen werden sollten. Wenn sie nicht wirklich Zombies sind, sollten Sie sie töten. In beiden Fällen wird das Töten launchdmehr Probleme verursachen, als es löst.
Gordon Davisson

Antworten:


17

Der richtige Weg, um Start-Daemons zu stoppen und zu starten, ist launchctl unload .

Beispielsweise:

Sie können einen Start - Daemon - Dienst mit dem Stopp Entladen subcommand von launchctl .

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

So starten Sie einen deaktivierten oder gestoppten Startdämon:

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

★ Seien Sie vorsichtig, wenn Sie Launch-Daemons willkürlich deaktivieren - insbesondere die offiziellen Apple-Daemons. Dies kann dazu führen, dass Ihr System möglicherweise nicht mehr gestartet werden kann, bis Sie im abgesicherten Modus starten und diese manuell wieder aktivieren. Sie beenden ein Launchctl nicht wie einen normalen Prozess, da es möglicherweise Ihr System beenden kann , wie Sie es erlebt haben.

> mehr Infos zu launchctl hier . (Apple launchctl man page)


Entschuldigung, ist das com.apple.bsd.launchdadd.plist? Ich sehe nicht launchdgenau Und danke für die Warnung ...
hatmatrix

Zum späteren Nachschlagen funktionieren diese Befehle auch mit scrun simctl spawn <sim_id> sudo launchctl unload …. Die Plist-Dateien sind unter$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan

3

Auf der launchd-Manpage:

Sie können launchd nicht direkt aufrufen.

Selbst wenn Sie es stoppen könnten, könnten Sie es nicht starten. Die Antwort lautet also, dass es keinen Weg gibt.


1
Warum die Gegenstimme? Mein Beitrag beantwortet die gestellte Frage richtig. Zugegeben, der andere Beitrag ist konstruktiver, kann jedoch die eigentliche Frage gemäß dem Titel des Beitrags nicht beantworten!
Ostergaard

Der andere Beitrag beantwortet die Frage.
DavidPostill

2
Nein, tut es nicht, es sagt, wie man Daemons neu startet, ohne sich selbst zu starten.
Ostergaard

3
lol - und es ist diese Einstellung, die Genauigkeit spielt keine Rolle mehr, die den langsamen Qualitätsverlust bei SO erklärt. Frohes neues Jahr!
Ostergaard

1
Schade, dass ich keine Kommentare ablehnen kann. Nicht nur diese Antwort ist richtig, die andere Antwort geht überhaupt nicht auf die Frage ein. Hier geht es nicht um Daemons, die von launchd gestartet wurden, sondern um Zombie-Prozesse, die von launchd geerbt wurden, wenn ein nicht reagierender Prozess zwangsweise beendet wurde. Ich habe das gleiche Problem und keinen verdammten Dämon, den ich töten muss, da es sich um einen Browser handelt, der das fehlerhafte Verhalten in launchd auslöst. Wenn ich mit "Was auch immer" antworte, brodelt mein Blut, da die gleichen Leute, die die Antwort als nützlich empfunden haben, die Frage überhaupt nicht verstehen, und das ist um ein Vielfaches schlimmer.
SaltwaterC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.