Tengo dos scripts que abren y cierran una aplicación; Digamos que es el incorporado Calculator.app
. El script "inicio" se usa /usr/bin/open
para iniciar la aplicación, luego un AppleScript de una línea para configurar la visibilidad de la aplicación false
. Esta es la totalidad del script "stop":
#!/bin/bash
osascript -e 'tell app "Calculator" to quit'
Estoy ejecutando estos scripts desde un LaunchDaemon que los llama en ciertos momentos fijos de la semana.
El comportamiento extraño que estoy viendo es que a veces, después de que se ejecuta el script "detener", el ícono Dock de la aplicación conserva su pequeño punto (lo que sugiere que todavía se está ejecutando). Sin embargo:
- Al hacer clic con el botón derecho en el icono del Dock, se muestra "La aplicación no responde"
- el cierre forzado a través del menú del icono del Dock no hace nada
ps
no muestra ningún proceso de Calculadora en ejecución
Y, lo más desconcertante, intentar volver a iniciar Calculator (a open
través de Spotlight o al hacer doble clic en su icono) produce un diálogo modal que dice que la aplicación "Calculator" ya no está abierta.
lsof
muestra estas entradas que pueden estar relacionadas:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Spotlight 443 jteach 54r DIR 1,4 102 28977573 /Applications/Calculator.app
Notificat 476 jteach txt REG 1,4 37933 29214948 /System/Library/Frameworks/NotificationCenter.framework/PlugIns/com.apple.ncplugin.calculator.appex/Contents/Resources/Assets.car
Notificat 476 jteach 8r REG 1,4 37933 29214948 /System/Library/Frameworks/NotificationCenter.framework/PlugIns/com.apple.ncplugin.calculator.appex/Contents/Resources/Assets.car
Mis preguntas:
- ¿Por qué mi script "stop" no puede hacer que la aplicación salga limpiamente?
- A falta de reiniciar, ¿hay alguna manera de sacar la aplicación de este estado zombie?
- ¿Cómo puedo modificar mi script para asegurarme de que la aplicación se cierra correctamente?
kill
o killall
. Sin embargo, todavía estoy interesado en descubrir qué está pasando y cómo hacer que la aplicación zombie desaparezca.
killall
parece confiable no dejar una aplicación zombie.
killall
todavía deja un zombie a veces. Entonces, mi pregunta aún necesita una respuesta.
sudo killall launchservicesd
seguida de sudo killall Dock
.
kill
lugar de usar AppleScript?