訊號:
中斷訊號 ----- 軟中斷(sigsegv)、硬中斷(sigint ctrl+c)
gec@ubuntu:/$ kill -l
1) sighup
2) sigint
3) sigquit
4) sigill
5) sigtrap
6) sigabrt
7) sigbus
8) sigfpe
9) sigkill
10) sigusr1
11) sigsegv
12) sigusr2
13) sigpipe
14) sigalrm
15) sigterm
16) sigstkflt
17) sigchld
18) sigcont
19) sigstop
20) sigtstp
21) sigttin
22) sigttou
23) sigurg
24) sigxcpu
25) sigxfsz
26) sigvtalrm
27) sigprof
28) sigwinch
29) sigio
30) sigpwr
31) sigsys
1) sighup 終端關閉時候核心發出的訊號 預設是終止程序
2)sigint ctrl + c
終止3: sigquit ctrl+\
終止quit (core dumped)
4: sigabrt abort
終止 9: sigkill 該訊號才是殺死 kill -9 pid 終止 killed (不能更改其預設處理方式)
10 12 :使用者自定義功能的訊號
忽略11: sigsegv 段錯誤
終止13:sigpipe 沒有讀端但是又去write的時候產生的
終止14) sigalrm 和alarm()函式配合,定時觸發該訊號
終止15:sigterm 終止 (ctrl+ ?)
17: sigchld 子程序退出時候核心產生的
忽略19: sigstop 程序暫停
stoped (不能更改其預設處理方式) t 01:16 0:00 ./signal 可以再傳送sigcont恢復執行
作用:直接進行使用者空間程序和核心程序間的互動
核心程序利用訊號來通知使用者空間程序發生哪些系統事件
訊號的傳送
kill -int 4980
kill(pid , 訊號)
raise(訊號) ---- 傳送個訊號給本程序
訊號的捕獲:
signal(訊號 , 訊號處理函式(自定義函式 , sig_dfl, sig_ign);
alarm 產生定時訊號
alarm(0) ; 取消鬧鐘
alarm(10); --- 10秒後會產生sigalrm
如果10秒沒有到,過了3秒又設定乙個鬧鐘
int ltime = alarm(5);
這個時候ltime 就等於上個鬧鐘的剩餘時間,7
如果沒有正在跑的鐘, 那alarm會返回0
sleep睡眠時候也能響應alrm訊號
pause
pause();
等待捕獲到程序中註冊了訊號處理函式的訊號,進入的是sleep狀態
例項:在父、子程序之間的訊號處理
#include #include #include #include int global_var = 5;
void func(int sig)
void func_1(int sig)
int main(int argc, char **argv)
} else// pid > 0 // 父程序,變數pid為子程序pid
}//這裡要保持父程序沒結束才能捕獲訊號。
//因為2個程序都有while死迴圈,所以最下面的那句不執行了。
} printf(" var = %d, global = %d \n\n", var,global_var); // 父 、子程序都會呼叫
exit(0);
}
延時訊號:
#include #include #include #include void func(int sig)
void alarm_f(int sig)
void main()
/* alarm是延多少時,然後執行alarm的中斷訊號,返回的是剩下的秒數
pause是讓目前的程序暫停,等到中斷訊號來了,再繼續。
所以waiting...不會一直輸出。是等到有中斷訊號來了再輸出
reference:
*/ exit(0);
}
訊號與中斷
訊號是系統為了響應某些狀況而產生的事件,程序收到訊號後應該採取相應的動作。用來通知程序發生了非同步事件。訊號與中斷的相似點 1 採用了相同的非同步通訊方式 2 當檢測出有訊號或中斷請求時,都暫停正在執行的程式而轉去執行相應的處理程式 3 都在處理完畢後返回到原來的斷點 4 對訊號或中斷都可進行遮蔽 ...
c語言 訊號
沒有被當前程序處理的訊號,因為阻塞問題這個訊號就不會被程序處理 kill 傳送訊號給某個程序 int kill pid t pid,int sig kill l include include include intmain int argc,char ar else if pid 0 return...
訊號和中斷的聯絡
經常見到訊號和中斷這兩個名詞,好像有中斷的地方就有訊號的概念,但是在介紹訊號的地方卻並沒有提及中斷,而這兩者又不存在包含關係。那麼,到底什麼是訊號,什麼是中斷?訊號的概念 訊號是資訊的一種表達形式 舉實際生活中例子來說 我們倆認識,我向你招一下手,就是在向你發乙個訊號。而你看到了我向你招手,就表示你...