Que se passe-t-il en coulisse lorsqu'un utilisateur donne une commande Quit
ou en Force Quit
dehors de l'application cible (par exemple, depuis Activity Monitor)?
En règle générale, l'opération «Quitter» n'est pas un signal. il s'agit d'un événement Apple , qui est le même type de communication inter-processus que celui utilisé pour les scripts AppleScript et pour l'ouverture de fichiers ou d'URL dans des applications déjà en cours d'exécution. Il provient de la lignée Mac OS plutôt que d'Unix.
Un processus doit s'inscrire spécifiquement pour recevoir les événements Apple. Ces processus sont des processus d'interface graphique ou du moins associés à une session de bureau (ce qui, en dehors de Activity Monitor, est la seule façon de se faire ordonner de cesser de fumer).
Toutefois, si vous «quittez» un processus à partir du moniteur d'activité et que ce processus ne s'est pas enregistré pour recevoir les événements Apple, il enverra SIGTERM (15) à la place.
Vous pouvez utiliser dtrace pour voir quels signaux sont envoyés aux processus:
sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'
Si vous forcez la fermeture d'une application affichée dans le Dock, le signal est généralement de -15 (TERM). Mais si vous forcez un processus d'arrière-plan à quitter Activity Monitor, il s'agit généralement de -9 (KILL).
Vous pouvez afficher les événements de forcer la fermeture pour les applications graphiques envoyées à
system.log
. Ou utilisez dtrace tel que posté dans ce fil de discussion. Avec dtrace, vous obtenez plus de précision, mais vous avez besoin de privilèges root.la source
/var/log/system.log
n'enregistre pas les signaux.Apr 28 13:04:21 com.apple.launchd.peruser.501[136] ([0x0-0x3e13e1].com.apple.TextEdit[5336]): Exited: Terminated: 15
Il n'enregistre cependant pas l'événement Quitter.system.log
.