
我認為 Linux 訊號是這樣運作的:
每個進程都有一個針對每個訊號的預設訊號處理程序,某些訊號的預設訊號處理程序會終止進程,而其他訊號的預設訊號處理程序只是忽略該訊號,等等。
下表顯示了預設訊號處理程序可以採取的所有操作(該表來自此文件):
學期 預設操作是終止進程。
伊格恩 預設操作是忽略該訊號。
核 預設操作是終止進程並轉儲核心(請參閱 core(5))。
停止 預設操作是停止該進程。
續 預設操作是繼續該進程(如果該進程目前已停止)。
您可以使用自己的訊號處理程序覆蓋預設訊號處理程序訊號()(我認為已棄用)或sigaction()。
到目前為止我的說法正確嗎?
現在我的問題是:是否有一些訊號您無法覆蓋其預設訊號處理程序?
答案1
您連結的兩個手冊頁都提到了其處理程序不能被覆蓋的訊號。在signal(2)
:
這些信號
SIGKILL
不能SIGSTOP
被捕獲或忽略。
在 sigaction(2)
:
簽名指定訊號,可以是除
SIGKILL
和之外的任何有效訊號SIGSTOP
。