訊號的基本概念及產生方式

2021-08-18 22:22:15 字數 2218 閱讀 4925

通俗一點說,訊號一般做提醒工作,提醒之後會產生一系列的動作,比如紅綠燈:過馬路見到紅燈亮了,提醒自己應該停止過馬路,或者聽到鬧鐘響了,或許很多人的動作是關掉鬧鐘後接著睡吧,但接著睡也是一種動作吧。

在計算機中,訊號是由作業系統發出的。首先先看一下計算機中的訊號吧。

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 34) sigrtmin 35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3

38) sigrtmin+4 39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8

43) sigrtmin+9 44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13

48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13 52) sigrtmax-12

53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9 56) sigrtmax-8 57) sigrtmax-7

58) sigrtmax-6 59) sigrtmax-5 60) sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2

63) sigrtmax-1 64) sigrtmax

其中注意,沒有32,33號訊號。1-31是普通訊號,34-64是實時訊號。

訊號的產生方式一般為:

1.使用者在終端下按某些鍵時,終端驅動程式會傳送訊號給前台程序,如:ctrl+c

2.硬體異常發出的訊號,這些條件由硬體檢測並通知核心,然後核心向當前程序傳送適當訊號。

3.乙個程序呼叫kill(2)函式可以傳送訊號給另乙個程序。

4.軟體條件產生。

一般訊號的處理方式:

1.忽略該訊號。

2.預設處理訊號。

3.使用者自定義(捕捉訊號)。

一、通過終端按鍵產生訊號

sigint的預設處理動作是終止程序,sigquit的預設處理動作是終止程序並且core dump

(核心轉儲)。

當乙個程序要異常終止時,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上,檔名叫做core,叫做core dump。但預設是不允許產生core檔案的,因為core檔案中可能儲存使用者密碼等資訊,不安全。

二、呼叫系統函式向程序發訊號

kill命令是呼叫kill函式實現的。kill函式可以給乙個程序傳送指定的訊號。。raise函式可以給當前的程序傳送指定的訊號(自己給自己傳送訊號)。

#includeint kill(pid_t pid,,int signo);

int raise(int signo);

這兩個函式都是成功返回0,失敗返回-1.

abort函式使用當前程序接受到訊號而異常終止。

#includevoid abort(void);

和exit函式一樣,abort函式總會成功,故沒有返回值。

需要注意:9號訊號不能**捉,6號訊號是自己給自己發訊號。

三、由軟體條件產生

sigpipe是一種由軟體條件產生的訊號,在管道中產生。下面介紹另外乙個,alarm函式,

#includeunsigned int alarm(unsigned int seconds);

呼叫alarm函式可以設定乙個鬧鐘,告訴核心在seconds秒後給當前程序傳送乙個sigalrm訊號,

該訊號的預設處理動作是終止當前程序。
最後,一定要記得,訊號是由作業系統發出的。

訊號的基本概念以及訊號的產生

一.訊號產生的場景 1.使用者輸入命令,在shell 啟動乙個前台程序 2.當使用者按一下 ctrl c 的時候,從鍵盤產生乙個硬體中斷 3.此時cpu 正在執行這個程序的帶 則該程序的執行 暫停執行,cpu 從使用者態切換到核心態處理該硬體中斷.4.中斷驅動程式將ctrl c 解釋為乙個 sigi...

訊號基本概念

sighup 終止程序 終端線路結束通話 sigint 終止程序 中斷程序 sigquit 建立core檔案終止程序,並且生成core檔案 sigill 建立core檔案 非法指令 sigtrap 建立core檔案 跟蹤自陷 sigbus 建立core檔案 匯流排錯誤 sigsegv 建立core檔...

訊號基本概念

訊號是資訊的載體,linux unix環境下,古老 經典的通訊方式,現下依然是最主要的通訊手段。a給b傳送訊號,b收到訊號之前執行自己的 收到訊號後,不管執行到程式的什麼位置,都要暫停執行,去處理訊號,處理完畢再繼續執行。訊號是軟體層面上實現的中斷,早期稱為 軟中斷 產生訊號 遞達 遞送並且到達程序...