在學習linux信號處理時發現在結構體sigaction中定義了一個信號處理函數指針sa_sigaction,而這個指針指向的是一個擁有三個參數的函數,結構體中定義的函數指針為:void (*sa_sigaction)(int, struct siginfo_t *, void *)
在筆者的資料上並沒有對siginfo_t這個結構體的詳細定義,而這個結構體中記錄的又是信號的細節值,讓人十分在意。在通過在網上查找資料,筆者發現了這個結構體的詳細定義:
 1 typedef struct {  2     int si_signo;  3     int si_code;  4  union sigval si_value;  5     int si_errno;  6  pid_t si_pid;  7  uid_t si_uid;  8     void *si_addr;  9     int si_status; 10     int si_band; 11 } siginfo_t; 
        下面介紹各個變量的含義。
si_signo: signal number的簡寫,該變量用來存儲信號編號並且恆有值;
si_code: signal code的簡寫,這個變量取值較多,這里不展開討論,具體可從下面鏈接處獲取;
si_value: signal value的簡寫,通過定義可以得知這個變量是一個結構體,該結構體定義如下:
1 union sigval { 2     int sival_int; 3     void *sival_ptr; 4 }; 
        si_errno: 如果該位不為0,則和信號在一起的有一個錯誤代碼,即errno(可以理解成信號發生錯誤)
si_pid: 發送該信號的進程id
si_uid: 發送該信號的用戶id
si_addr: 錯誤發生的地址
這里筆者水平有限,如果覺得文章有錯誤或者不全面,可以通過下面的網址查看,里面有這篇隨筆的參考:
https://www.mkssoftware.com/docs/man5/siginfo_t.5.asp#Signal_Codes
