Signals

SIGSTOP 啟動時的信號

  • May 17, 2022

如果一個程序在被停止後得到一個信號會發生什麼SIGSTOP

我試圖了解並很好地了解如何處理它。不幸的是,我只能找到對信號的簡短描述,但沒有特定案例的詳細資訊。

截至目前,我的理解是,雖然SIGSTOP有效:

  • SIGKILL將立即終止該程序
  • 其他信號將被收集起來,在 aSIGCONT上,暫停的信號將在程序中釋放,就好像所有信號都在那個時刻發送一樣
  • SIGCONT在處理 a , sa_mask, sa_flags‘s等之後的成束信號SA_RESTART時,將按正常方式應用

例如,如果有SIGSTOP-> SIGHUP->SIGCONT序列,則處理SIGHUP將暫停,直到SIGCONT收到 after 為止。

我不確定這是否正確。

我仍然對這些情況一無所知:

  1. 我仍然對聚集信號的順序感到困惑。

例如:SIGSTOP-> SIGHUP-> SIGTERM-> SIGCONT:將按照收到SIGHUPSIGTERM順序處理,還是按照任意順序處理? 2. 如果SIGSTOP在有效期間多次接收到相同的信號會發生什麼?

SIGSTOP-> SIGHUP-> SIGHUP->SIGCONT 3. 會SIGSTOP中斷正在執行的信號處理程序嗎?如果信號正在等待處理,它們是否會保留到SIGCONT?


我在這些類似問題的答案中找到了一些答案,但我對上述事情仍然不清楚。

SIGSTOP不是“有效”的東西。信號被傳遞,然後程序處於停止狀態。這種狀態是有效的。如果在該狀態下針對程序生成了一些信號,那麼它們就會變得掛起。信號不能傳遞給停止的程序。當程序再次執行時,它們會根據信號程序遮罩進行處理,並且它們的處置:忽略信號被忽略。

我不確定指定的順序。只有實時信號具有可靠的排隊特性。例如,POSIX 包含類似“如果在呼叫 後有任何未決的未阻塞信號sigprocmask(),則應在呼叫 sigprocmask() 返回之前傳遞這些信號中的至少一個”。例如,如果 SIGINT 和 SIGTSTP 都處於掛起狀態,則它不會指定先傳遞哪個。

當然也有一些特殊的行為:被 SIGSTOP 停止並不能阻止被 SIGKILL 殺死。

引用自:https://unix.stackexchange.com/questions/701156