Linux中的訊號處理

2021-04-21 07:50:29 字數 835 閱讀 4714

突然想起使用sigaction註冊訊號處理函式時,訊號處理函式型別有二個:

struct sigaction;

通過對上面的sa_flags賦值為sa_siginfo,讓系統使用多引數的訊號處理函式。在處理函式中,由於傳進來乙個siginfo_t的引數,我們可以通過它獲取到哪個程序傳進來的訊息。

今天試了下,有點問題,在產生訊號時,應當呼叫註冊的訊號處理函式,但此時,報出段錯誤,去除註冊訊號處理函式那行,一切ok。所以斷定系統在呼叫訊號處理函式時發生錯誤。網上查詢相關資料也沒有看到原因,故此記下來,繼續尋找答案。(注:如果使用sa_handler,完全沒有問題)

#include 

#include 

#include 

#include 

#include 

#include 

#include 

void child_process_exit_handle(int signo,siginfo_t *info, void *context);

int main(int argc, char **argv)

else

if(child_pid == 0)

printf("do nothing!/n");

int ch = 0x00;

while(ch = getchar(),ch != 'q'){}

sigaction(sigchld,&old_action,&new_action);

return 1;

}void child_process_exit_handle(int signo, siginfo_t *info, void *context)

Linux的訊號處理

linux為實現訊號處理提供了比較多的介面,看似紛雜,但理清訊號的關係後還是很有條理的。主要分為以下四組,怎麼傳送乙個訊號,收到乙個訊號後做什麼樣的處理,主動等待乙個訊號的發生,對特定訊號只記錄是否發生供以後再處理 四組的api如下 不考慮多執行緒 傳送訊號 kill,alarm,arise 安裝訊...

Linux 訊號處理

用sigcation函式 在標頭檔案signal.h中 來設定自己的訊號處理函式,用法參見 各種訊號參見 寫了個sigint,也就是c c鍵的處理例子 include includestruct sigaction newsigint,oldsigint void signalinthandler ...

linux 訊號處理

linux下的程式,有時候需要在接到一些終止訊號後,進行清理工作再退出。訊號2的處理函式 void signalhandler 2 int signal cleanup exit 2 int main int argc,char argv 處理訊號2 struct sigaction act 2,a...