Signals
SIGSTOP 啟動時的信號
如果一個程序在被停止後得到一個信號會發生什麼
SIGSTOP
?我試圖了解並很好地了解如何處理它。不幸的是,我只能找到對信號的簡短描述,但沒有特定案例的詳細資訊。
截至目前,我的理解是,雖然
SIGSTOP
有效:
SIGKILL
將立即終止該程序- 其他信號將被收集起來,在 a
SIGCONT
上,暫停的信號將在程序中釋放,就好像所有信號都在那個時刻發送一樣SIGCONT
在處理 a ,sa_mask
,sa_flags
‘s等之後的成束信號SA_RESTART
時,將按正常方式應用例如,如果有
SIGSTOP
->SIGHUP
->SIGCONT
序列,則處理SIGHUP
將暫停,直到SIGCONT
收到 after 為止。我不確定這是否正確。
我仍然對這些情況一無所知:
- 我仍然對聚集信號的順序感到困惑。
例如:
SIGSTOP
->SIGHUP
->SIGTERM
->SIGCONT
:將按照收到SIGHUP
的SIGTERM
順序處理,還是按照任意順序處理? 2. 如果SIGSTOP
在有效期間多次接收到相同的信號會發生什麼?
SIGSTOP
->SIGHUP
->SIGHUP
->SIGCONT
3. 會SIGSTOP
中斷正在執行的信號處理程序嗎?如果信號正在等待處理,它們是否會保留到SIGCONT
?我在這些類似問題的答案中找到了一些答案,但我對上述事情仍然不清楚。
SIGSTOP
不是“有效”的東西。信號被傳遞,然後程序處於停止狀態。這種狀態是有效的。如果在該狀態下針對程序生成了一些信號,那麼它們就會變得掛起。信號不能傳遞給停止的程序。當程序再次執行時,它們會根據信號程序遮罩進行處理,並且它們的處置:忽略信號被忽略。我不確定指定的順序。只有實時信號具有可靠的排隊特性。例如,POSIX 包含類似“如果在呼叫 後有任何未決的未阻塞信號
sigprocmask()
,則應在呼叫 sigprocmask() 返回之前傳遞這些信號中的至少一個”。例如,如果 SIGINT 和 SIGTSTP 都處於掛起狀態,則它不會指定先傳遞哪個。當然也有一些特殊的行為:被 SIGSTOP 停止並不能阻止被 SIGKILL 殺死。