3 votos

OS X aplicación de inicio/parada de gancho

¿Cómo puedo tener un script automáticamente se ejecutó cuando puedo iniciar o detener una aplicación sin utilizar la 3ª parte de las herramientas?

Yo no estoy en el desarrollo de la aplicación mí, es una pregunta general que se aplica a cualquiera de las aplicaciones instaladas.

Aclaraciones: se inicia La aplicación o dejar de ser de cualquier medio posible. El guión y la aplicación debe estar corriendo en serie.

4voto

tinytinysky Puntos 41

Suponiendo que las respuestas a mis preguntas de aclaración de arriba son los que usted desea:

  1. la secuencia de comandos para ejecutar en cualquier momento específico de la aplicación que se ejecuta, independientemente de cómo o por qué proceso o usuario, y
  2. la secuencia de comandos para ejecutar en un asincrónica, sin bloqueo (por ejemplo, para propósitos de registro)

...puede ser un par de maneras de hacerlo. Ninguno que se me ocurre son terriblemente elegante o llave en mano y todos requieren algún tipo de endemoniado proceso que se ejecuta como root que actuar para supervisar el sistema de eventos de lanzamiento.

Monitorización exec llamadas a través de fs_usage

Una manera posible es crear un demonio (LaunchDaemon) que se ejecuta de forma continua, la supervisión de una ejecución fs_usage comando para exec eventos. Usted puede ver el tipo de información que se obtiene ejecutando el siguiente comando:

sudo fs_usage -f exec

Aquí está la línea correspondiente al abrir Safari:

17:30:14.465075  posix_spawn    /Applications/Safari.app/Contents/MacOS/Safari    0.000352   launchd.51630812

Aquí está la salida, cuando me abrió corrió open /Applications/Maps.app desde la línea de comandos:

17:35:51.594849  execve       /usr/bin/open                                 0.003680 W bash.51635318
17:35:51.642212  posix_spawn  /Applications/Maps.app/Contents/MacOS/Maps    0.003158 W launchd.51635324

Tenga en cuenta que casi todas las "Aplicaciones" (/Aplicaciones/*.app) son lanzadas a través de la posix_spawn por launchd y el archivo que se utiliza para el lanzamiento de ellas es /Applications/FOO.app/Contents/MacOS/FOO (donde FOO es el nombre de la aplicación). Por lo tanto, teóricamente, podría tener su LaunchDaemon la vigilancia de este comando y la activación de su secuencia de comandos cada vez que se emite la ruta de acceso de la aplicación con la que estamos de monitoreo:

sudo fs_usage -w -f exec | perl -lne 'm/.*posix_spawn +(.*?) +[0-9.]+ . launchd.\d+/sm && print $1'

Monitorización launchservicesd través lsappinfo

Yo no era muy feliz con la anterior, porque es un poco chapucero, observando el sistema de archivos de eventos en lugar de el evento de lanzamiento que los provocó. Y entonces me di cuenta, "launchd"! Introduzca Servicios De Lanzamiento:

Lo que conduce a:

lsappinfo listen +all forever

Y Voilà, no sólo han de lanzamiento, pero también recibe una notificación cuando una aplicación se cierra. Las claves que te importa son los siguientes:

  • kLSNotifyApplicationLaunch
  • kLSNotifyApplicationBirth
  • kLSNotifyLaunchFinished
  • kLSNotifyApplicationDeath

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X