当用户从目标应用程序外部(例如从活动监视器)发出Quit或Force Quit命令时,幕后会发生什么?
Kev*_*eid 10
通常,“退出”操作不是信号;它是一个Apple Event,它与用于 AppleScript 脚本和用于在已经运行的应用程序中打开文件或 URL 的进程间通信类型相同,并且来自 Mac OS 沿袭而非 Unix。
一个进程必须专门注册才能接收 Apple 事件,这些进程要么是 GUI 进程,要么至少与桌面会话相关联(在活动监视器之外,这是他们最终被告知完全退出的唯一方式)。
但是,如果您从活动监视器“退出”一个进程并且该进程尚未注册以接收 Apple 事件,它将改为发送 SIGTERM (15)。
您可以使用 dtrace 查看发送给进程的信号:
sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'
如果您强制退出 Dock 中显示的应用程序,则信号通常为 -15 (TERM)。但是如果你从活动监视器强制退出后台进程,它通常是 -9 (KILL)。
| 归档时间: |
|
| 查看次数: |
5358 次 |
| 最近记录: |