Linux
為什麼 Linux 核心不先發送 SIGCONT 再發送 SIGHUP 到包含已停止程序的新孤立程序組?
APUE 說
由於程序組在父程序終止時是孤立的,並且程序組包含一個停止的程序,因此 POSIX.1 要求向新孤立的程序組中的每個程序發送掛斷信號 (SIGHUP) ,然後是繼續信號 (SIGCONT ) )。
核心在 SIGHUP 之後發送 SIGCONT,但程序在執行 SIGHUP 之前被 SIGCONT 喚醒。那麼為什麼Linux核心不在SIGHUP之前發送SIGCONT呢?
謝謝。
相關但未回答SIGCONT 的預設操作是否在首次處理任何未決的未阻塞信號之前或之後恢復停止程序的執行?
我沒有回答我的問題。
您不僅回答了您的問題,最後添加的連結也回答了您的問題。
當一個程序停止時,所有的信號處理都會停止,除了 SIGCONT 和 SIGKILL - 實際上由作業系統處理。
這意味著 SIGHUP 只能在程序恢復後進行處理,這發生在接收和處理 SIGCONT 時,因此,即使您發送 SIGHUP 後跟 SIGCONT,它們也將以相反的順序處理。
現在,在實踐中,核心之前發送 SIGHUP 將導致處理 SIGCONT 和處理 SIGHUP 之間的程序完成的事情更少,因為第二個已經排隊等待處理。