我想知道有關信號的完整信息SIGTTIN
,例如我想知道SIGTTIN
信號是否可以處理。
這文件僅說明有關信號的以下內容SIGTTIN
:
SIGTTIN 21,21,26 停止後台程序的終端輸入
並且man SIGTTIN
在終端機中輸入沒有返回任何內容。
編輯:
我的意思不是可以向進程發送什麼訊號,而是接收訊號的進程是否可以更改訊號的預設操作。例如:SIGTTIN
訊號的預設操作是停止進程,您可以使用該sigaction()
函數在程式中變更此預設操作。現在,有些訊號不允許您更改其預設操作,這就是我正在尋找的內容(有關哪些訊號不允許您更改其預設操作的文件)。
答案1
您可以使用此命令,該命令通常是正確的。
kill -l | egrep SIGTTIN
您也可以編寫一個快速 PERL 腳本來擷取 SIGTTIN + 然後在背景執行它 + 如果您的 SIGTTIN 處理程序執行則輸出一條簡單的診斷訊息。
答案2
我認為除了完全忽略信號或安裝信號處理程序之外,您無法更改信號的預設操作。sigaction(2)
說:
sa_handler指定與signum 關聯的操作,並且可能是
SIG_DFL
預設操作、SIG_IGN
忽略此訊號或指向訊號處理函數的指標。此函數接收訊號編號作為其唯一參數。
如果您想將某個訊號的操作更改為其他預設操作之一,您可以引發另一個訊號來執行您想要的操作(獲取核心轉儲或停止進程),或者只是簡單退出(終止進程) )。
SIGKILL
和SIGSTOP
是您無法捕獲或阻止的兩個信號。sigaction(2)
:
簽名指定訊號,可以是除
SIGKILL
和之外的任何有效訊號SIGSTOP
。
這些訊號
SIGKILL
無法SIGSTOP
被捕捉、封鎖或忽略。
然而,忽略來自實際故障(無效的記憶體存取、無效的指令)的訊號可能不會使進程處於非常穩定的狀態。