¿Cómo forzar el cierre de la aplicación Applescript desde la terminal?

3

Escribí un applecript que enciende mis luces. Lo exporté como una aplicación con el nombre "LightsOn", y aparece con ese nombre en el monitor de actividad.

Bajo ciertas circunstancias, esta aplicación se atasca. Puedo forzar que salga de Activity Monitor, pero quiero poder hacerlo desde un script. killall LightsOn no funciona; Me han dicho que no matching processes belonging to you were found .

¿Cómo puede forzar correctamente salir de esta aplicación desde el terminal? O, ¿cómo puedo descubrir el nombre apropiado para killall?

    
pregunta Wowfunhappy 11.10.2018 - 04:11

2 respuestas

2

El motivo killall LightsOn no funciona porque todo el nombre del proceso de la aplicación AppleScript es applet . Por ejemplo, la ruta ejecutable es:

../LightsOn.app/Contents/MacOS/applet

En general, y suponiendo que los procesos no están bloqueados, se podría usar killall applet , sin embargo, esto terminará con todas las aplicaciones en ejecución de AppleScript , y por supuesto, eso puede no ser deseable.

Cuando se cuelga un proceso, deberás usar una señal KILL , por ejemplo:

killall -KILL applet

Sin embargo, pkill es el camino a seguir para apuntar fácilmente a una aplicación específica AppleScript y debido a que está bloqueada ... use una señal KILL , por ejemplo:

pkill -9 -f LightsOn

O:

pkill -KILL -f LightsOn

En esta instancia, -9 es solo otra forma de decir -KILL .

Ahora con pkill y usando la opción -f , se puede usar más de la lista de argumentos completa , por ejemplo:

pkill -9 -f /Applications/LightsOn.app/Contents/MacOS/applet

Entonces no hay ambigüedad en cuanto a qué applet proceso está apuntando. Uno puede usar la mayor parte de la lista de argumentos completa que considere necesario para apuntar al proceso correcto.

Por ejemplo, pkill -9 -f LightsOn terminará una aplicación AppleScript llamada NoLightsOn , así que siempre use suficiente de la lista de argumentos completa para finalizar el proceso correcto.

Para referencia:

Desde la página del manual pkill :

 -f          Match against full argument lists.  The default is to match
             against process names.

Desde la página del manual killall :

 Some of the more commonly used signals:

 1       HUP (hang up)
 2       INT (interrupt)
 3       QUIT (quit)
 6       ABRT (abort)
 9       KILL (non-catchable, non-ignorable kill)
 14      ALRM (alarm clock)
 15      TERM (software termination signal)

Tenga en cuenta que esta es solo una lista parcial de señal y se usa con muchas de las diferentes utilidades que pueden terminar un proceso. Consulte las distintas páginas del manual de las utilidades utilizadas para obtener información adicional.

    
respondido por el user3439894 11.10.2018 - 12:33
1

Prueba esto:

ps auxwww | fgrep -v fgrep | fgrep -i LightsOn

Eso debería mostrarle la información del proceso correspondiente.

También puedes probar pkill , que debería funcionar así:

pgrep -fl LightsOn

Si eso te muestra el PID, puedes pasar a pkill :

pkill -9 -f LightsOn

Cuando ejecutas pkill -9, no le estás diciendo a la aplicación que se cierre por sí misma, sino que le está diciendo al sistema operativo que deje de ejecutar el programa, sin importar lo que esté haciendo el programa.

Cuando la aplicación se atasca enviando kill sin especificar el número de señal, automáticamente le asignará la señal < 15 > / p>     

respondido por el TJ Luoma 11.10.2018 - 04:38

Lea otras preguntas en las etiquetas