Какие сигналы посылает OS X для команд «Выход» и «Принудительное завершение»?

Какие сигналы посылает OS X для команд «Выход» и «Принудительное завершение»?

Что происходит за кулисами, когда пользователь дает команду Quitили Force Quitизвне целевого приложения (например, из Activity Monitor)?

решение1

Как правило, операция «Выход» выполняетсянетсигнал; этоСобытие Apple, который представляет собой тот же тип межпроцессного взаимодействия, который используется для сценариев AppleScript и для открытия файлов или URL-адресов в уже запущенных приложениях, и происходит из родословной Mac OS, а не Unix.

Процесс должен специально зарегистрироваться для получения событий Apple, и такие процессы являются либо процессами графического интерфейса, либо, по крайней мере, связаны с сеансом рабочего стола (что, за исключением Activity Monitor, является единственным способом заставить их вообще завершить работу).

Однако если вы «завершите» процесс из Activity Monitor и этот процесснетзарегистрирован для получения событий Apple, вместо этого будет отправлен SIGTERM (15).

решение2

Вы можете использовать dtrace, чтобы увидеть, какие сигналы отправляются процессам:

sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'

Если вы принудительно завершаете приложение, отображаемое в Dock, сигнал обычно равен -15 (TERM). Но если вы принудительно завершаете фоновый процесс из Activity Monitor, это обычно равно -9 (KILL).

решение3

Вы можете просматривать события Force Quit для приложений GUI, отправленных в system.log. Или используйте dtrace, как указано в этой теме. С dtrace вы получаете большую детализацию, но вам потребуются привилегии root.

Связанный контент