7

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

3 ответа3

7

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

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

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

6

Вы можете использовать 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).

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .