¿Cómo reiniciar launchd OS X sin reiniciar?

14

Cuando ejecuto Zotero / Firefox, a menudo se bloquean y me quedan procesos zombie; después de esto no puedo abrir nuevas instancias de Zotero o Firefox. Quiero deshacerme de estos procesos zombies en lugar de reiniciar, así que para <pid>el proceso zombie,

$ ps -p <pid> -o ppid=

me da el <parent_pid>y

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

me dice que el proceso padre es /sbin/launchdpara el usuario crippledlambda.

¿Hay alguna manera de reiniciar esto sin matar mi sistema?

sudo kill -1 <parent_pid>

no hace nada. Intenté escribir esto en un script y ejecutarlo con 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

y esto obviamente (?) me deja con una pantalla gris que no responde, así que tengo que reiniciar de todos modos. Gracias por adelantado por tus sugerencias.

hatmatrix
fuente
¿Por qué estás matando launchd en lugar de los procesos sobrantes? launchd es una parte central de la sesión del usuario; incluso si usted podría reiniciarlo, la nueva instancia no sería el padre de todos los otros procesos que es responsable de ... cosas como el Finder, Dock, etc
Gordon Davisson
@ Gordon, no puedes matar los procesos de zombis, así que tienes que ir tras el padre, a menos que me falte algo.
hatmatrix
¿Son verdaderos zombies (es decir, procesos que han salido, pero cuyo estado de salida no se ha leído)? Si lo son, algo mucho más profundo está mal, ya launchdque siempre debe leer los estados de salida de sus hijos de inmediato. Si no son realmente zombies, entonces deberías estar matándolos. En cualquier caso, matar launchdva a causar más problemas de los que resuelve.
Gordon Davisson el

Respuestas:

17

La forma correcta de detener e iniciar demonios de lanzamiento es launchctl unload .

Por ejemplo:

Puede detener un servicio de demonio de lanzamiento utilizando el subcomando de descarga de launchctl .

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

Para iniciar un demonio de lanzamiento deshabilitado o detenido:

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

★ Tenga cuidado al deshabilitar los daemons de lanzamiento al azar, especialmente los oficiales de Apple; potencialmente puede hacer que su sistema no se pueda arrancar hasta que comience en modo seguro y los vuelva a habilitar manualmente. No matas un launchctl como un proceso normal porque potencialmente puede matar tu sistema como has experimentado.

> más información sobre launchctl aquí . (Página de manual de Apple launchctl)

Mena Ortega
fuente
Lo siento, eso es com.apple.bsd.launchdadd.plist? No veo launchdexactamente Y gracias por la advertencia ...
hatmatrix
Para referencia futura, estos comandos también funcionan con scrun simctl spawn <sim_id> sudo launchctl unload …. Los archivos de plist están debajo$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan
3

Desde la página de manual de launchd:

No puede invocar launchd directamente.

Por lo tanto, incluso si pudiera detenerlo, no podría iniciarlo, por lo que la respuesta es que no hay manera.

ostergaard
fuente
1
¿Por qué el voto negativo? Mi publicación responde correctamente la pregunta formulada. Por supuesto, la otra publicación es más constructiva, ¡pero en realidad no responde la pregunta real según el título de la publicación!
ostergaard el
La otra publicación responde la pregunta.
DavidPostill
2
No, no lo hace, dice cómo reiniciar los demonios no se lanzó por sí mismo.
ostergaard el
3
jajaja - y es esa actitud, esa precisión que ya no importa, lo que explica la lenta disminución de la calidad en SO. ¡Feliz año nuevo!
ostergaard el
1
Lástima que no puedo rechazar comentarios. No solo esta respuesta es correcta, la otra respuesta no responde a la pregunta. No se trata de demonios iniciados por launchd, sino de procesos zombies heredados por launchd cuando un proceso que no responde ha finalizado por la fuerza. Tengo el mismo problema y ningún demonio sangriento que matar, ya que es un navegador que desencadena el comportamiento defectuoso en launchd. Responder con "lo que sea" hace que mi sangre hierva ya que las mismas personas que han encontrado útil la respuesta no entienden la pregunta en primer lugar y eso es peor en un orden de magnitud.
Agua saladaC