C語言 unix c 如何改變訊號的處理方式

2021-08-07 13:27:13 字數 975 閱讀 3220

程序對訊號的處理有預設動作。預設處理是終止程序。

對訊號的處理有3種方式:預設處理,忽略訊號,使用者自定義

sig_dfl:預設

sig_ign:忽略

doit(這裡的名字自己定義,doit只是為了佔位):使用者自定義的訊號處理函式

子程序從父程序繼承訊號處理函式

bash的訊號繼承是預設處理(終止程序)

系統提供了用來改變訊號的處理函式signal(2)

#include

typedef

void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

功能:引數:

signum:指定了訊號的編號

handler:指定了signum訊號的處理函式

sig_dfl sig_ign 使用者自定義

sig_err 錯誤

舉例說明:編碼實現程序忽略2號訊號,(signal2.c)

#include

int main(void)

tarena@ubuntu:~/day/day32$ a.out

^c^c^c^c^c^c^c^c^\退出 (核心已轉儲)

分析: 輸入ctrl+c是停止不了的 ctrl+\可以終止

這裡的2號訊號已經被自定義,相當於忽略

舉例: 編碼實現程序對2號訊號的處理採用使用者自定義函式(signal_2u.c)

#include

#include

//函式的引數是訊號的編號

void doit(int n)

int main(void)

命令: tarena@ubuntu:~/day/day32$ a.out

結果: ^crecv...2

^crecv...2

^crecv...2

C語言 unix c 訊號基礎

二 訊號的基礎 1 什麼是訊號 訊號就是 軟中斷 軟中斷就是軟體模擬的中斷機制。2 中斷是什麼 正常的執行流程,訊號處理程式是兩條執行路線,但是屬於同乙個程序 3 系統為我們提供了哪些訊號?kill l 察看系統的中斷 64個訊號,32,33沒有 tarena ubuntu kill l 1 sig...

C語言 unix c 訊號阻塞和未決訊號

五 訊號阻塞和未決訊號 訊號集型別 sigset t 系統對sigset t型別進行了封裝 include int sigemptyset sigset t set 功能 初始化訊號集,不包含任何訊號 引數 set 指定要初始化的訊號集 返回值 0 成功 1 錯誤 int sigfillset si...

C語言 unix c 動態載入

動態載入 在程式中根據程式的需要,動態載入某個庫函式,這種行為稱為動態載入,系統為實現動態載入提供了一下函式 man 3 dlopen顯示幫助 標頭檔案 include void dlopen const char filename,int flag 引數 filename 制定了動態庫的檔案名字 ...