本系列只是為了研究C語言的頭文件,如果signal.h
展開講感覺就有點跑題了,網上有許多對信號機制的解析,寫的都非常好,大家可以搜一些,這里就只對signal
進行記錄,以便后續繼續學習。
kill -l
就可以看到所以的信號以及對應的編號列表中,編號為1 ~ 31的信號為傳統UNIX支持的信號,是不可靠信號(非實時的),編號為32 ~ 63的信號是后來擴充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區別在于前者不支持排隊,可能會造成信號丟失,而后者不會。
細心的人可能會發現,上圖的編號沒有32和33,不知道是不是系統保留的信號,不過我在signum.h
里面找到了這兩個定義
知道的大神,希望能在下方留言指點
signal函數 系統使用signal
函數來注冊信號處理函數,聲明如下void (*signal(int signum, void (*handler)(int)))(int);為了方便理解,POSIX進行了如下定義
typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);可以看到signal
函數有兩個參數
signum
指明了所要處理的信號類型,它可以取除了SIGKILL和SIGSTOP外的任何一種信號
handler
有三種選擇 SIG_IGN:忽略參數signum所指的信號。 SIG_DFL:恢復參數signum所指信號的處理方法為默認值。 sighandler_t類型的函數指針。
返回值是返回先前的信號處理函數指針,如果有錯誤則返回SIG_ERR(-1)。
新聞熱點
疑難解答