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 權限。

相關內容