OS X 为退出和强制退出命令发送什么信号?

OS X 为退出和强制退出命令发送什么信号?

当用户从目标应用程序外部(例如从活动监视器)发出Quit或命令时,幕后会发生什么?Force Quit

答案1

作为一般规则,“退出”操作是不是一个信号;它是一个苹果活动,它与 AppleScript 脚本以及在已运行的应用程序中打开文件或 URL 所使用的进程间通信类型相同,并且源自 Mac OS 血统而非 Unix。

进程必须专门注册才能接收 Apple 事件,并且此类进程要么是 GUI 进程,要么至少与桌面会话相关联(在活动监视器之外,这是最终告知它们退出的唯一方式)。

但是,如果你从活动监视器中“退出”某个进程,并且该进程已经不是注册接收 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)。但是如果你从活动监视器中强制退出后台进程,信号通常为 -9 (KILL)。

答案3

您可以查看发送到 的 GUI 应用程序的强制退出事件system.log。或者,使用此线程中发布的 dtrace。使用 dtrace 可以获得更详细的信息,但需要 root 权限。

相关内容