Comment redémarrer launchd OS X sans redémarrer?

14

Lorsque j'exécute Zotero / Firefox, ils plantent souvent et je me retrouve avec des processus zombies; après cela, je ne peux pas ouvrir de nouvelles instances de Zotero ou Firefox. Je veux me débarrasser de ces processus zombies plutôt que de redémarrer, donc pour <pid>le processus zombie,

$ ps -p <pid> -o ppid=

me donne le <parent_pid>et

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

me dit que le processus parent est /sbin/launchdpour l'utilisateur crippledlambda.

Existe-t-il un moyen de redémarrer cela sans tuer mon système?

sudo kill -1 <parent_pid>

ne fait rien. J'ai essayé d'écrire ceci dans un script et de l'exécuter avec 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

et cela évidemment (?) me laisse avec un écran gris qui ne répond pas donc je dois quand même redémarrer. Merci en avance pour vos suggestions.

hatmatrix
la source
Pourquoi tuez-vous launchd au lieu des processus restants eux-mêmes? launchd est un élément central de la session utilisateur; même si vous pouviez le redémarrer, la nouvelle instance ne serait pas le parent de tous les autres processus dont elle est responsable ... des choses comme le Finder, le Dock, etc.
Gordon Davisson
@Gordon, vous ne pouvez pas tuer les processus zombies, vous devez donc poursuivre le parent, sauf si je manque quelque chose.
hatmatrix
S'agit-il de vrais zombies (c'est-à-dire de processus qui se sont terminés, mais dont le statut de sortie n'a pas été lu)? S'ils le sont, quelque chose de beaucoup plus profond est faux, car il launchdfaut toujours lire immédiatement le statut de sortie de ses enfants. S'ils ne sont pas vraiment des zombies, alors vous devriez les tuer. Dans les deux cas, tuer launchdva causer plus de problèmes qu'il n'en résout.
Gordon Davisson

Réponses:

17

La bonne façon d'arrêter et de démarrer les démons de lancement est launchctl unload .

Par exemple:

Vous pouvez arrêter un service démon de lancement en utilisant la décharge sous - commande de launchctl .

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

Pour démarrer un démon de lancement désactivé ou arrêté:

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

★ Soyez prudent lorsque vous désactivez les démons de lancement au hasard - en particulier ceux d'Apple officiels; il peut potentiellement rendre votre système non amorçable jusqu'à ce que vous démarriez en mode sans échec et que vous les réactiviez manuellement. Vous ne tuez pas un launchctl comme un processus normal car il peut potentiellement tuer votre système comme vous l'avez connu.

> plus d'informations sur launchctl ici . (Page de manuel Apple launchctl)

Mena Ortega
la source
Désolé, c'est ça com.apple.bsd.launchdadd.plist? Je ne vois pas launchdexactement. Et merci pour l'avertissement ...
hatmatrix
Pour référence future, ces commandes fonctionnent également avec scrun simctl spawn <sim_id> sudo launchctl unload …. Les fichiers plist sont sous$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan
3

Depuis la page de manuel launchd:

Vous ne pouvez pas appeler directement launchd.

Par conséquent, même si vous pouviez l'arrêter, vous ne pourriez pas le démarrer. La réponse est donc qu'il n'y a aucun moyen.

ostergaard
la source
1
Pourquoi le downvote? Mon message répond correctement à la question posée. Certes, l'autre article est plus constructif, mais il ne répond pas à la question réelle, comme le titre du message!
ostergaard
L'autre message répond à la question.
DavidPostill
2
Non, il dit comment redémarrer les démons sans se lancer lui-même.
ostergaard
3
lol - et c'est cette attitude, cette précision n'a plus d'importance, qui explique la lente baisse de la qualité sur SO. Bonne année!
ostergaard du
1
Dommage que je ne puisse pas downvoter les commentaires. Non seulement cette réponse est correcte, mais l'autre réponse ne répond pas du tout à la question. Il ne s'agit pas de démons démarrés par launchd, mais de processus zombies hérités par launchd lorsqu'un processus qui ne répond pas a été interrompu de force. J'ai le même problème et aucun démon sanglant à tuer car c'est un navigateur qui déclenche le comportement défectueux dans launchd. Répondre avec "quoi que ce soit" fait bouillir mon sang car les mêmes personnes qui ont trouvé la réponse utile ne comprennent pas la question en premier lieu et c'est pire d'un ordre de grandeur.
SaltwaterC