O que acontece nos bastidores quando um usuário dá um comando Quit
ou Force Quit
de fora do aplicativo de destino (por exemplo, do Activity Monitor)?
Responder1
Como regra geral, a operação “Sair” énãoum sinal; é umEvento da Apple, que é o mesmo tipo de comunicação entre processos usado para scripts AppleScript e para abrir arquivos ou URLs em aplicativos já em execução e vem da linhagem Mac OS em vez de Unix.
Um processo deve ser registrado especificamente para receber eventos da Apple, e esses processos são processos GUI ou pelo menos associados a uma sessão de desktop (que, fora do Activity Monitor, é a única maneira pela qual eles podem acabar sendo instruídos a encerrar).
No entanto, se você “sair” de um processo do Activity Monitor e esse processo tivernãoregistrado para receber eventos da Apple, ele enviará SIGTERM (15).
Responder2
Você pode usar o dtrace para ver quais sinais são enviados aos processos:
sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'
Se você forçar o encerramento de um aplicativo mostrado no Dock, o sinal geralmente é -15 (TERM). Mas se você forçar o encerramento de um processo em segundo plano do Activity Monitor, geralmente será -9 (KILL).
Responder3
Você pode visualizar eventos Forçar Encerramento para aplicativos GUI enviados para system.log
. Ou use dtrace conforme postado neste tópico. Com o dtrace você obtém mais granularidade, mas precisa de privilégios de root.