Linux下C編程:訊號具體含義解釋

來源:互聯網
上載者:User

訊號及其簡介

訊號是一種進程通訊的方法,他應用於非同步事件的處理。訊號的實現是一種非強制中斷。它被發送為一個正在啟動並執行進程,已告知進程某個事件發生了。

1) SIGHUP 本訊號在使用者終端串連(正常或非正常)結束時發出,通常是在終端的控制進程結束時, 通知同一session內的各個作業,這時它們與控制終端不再關聯.

2) SIGINT 程式終止(interrupt)訊號,通常是從終端發出中斷指令如ctrl+c或delete鍵

3) SIGQUIT 和SIGINT類似,但由QUIT字元(通常是Ctrl+\)來控制.進程在因收到SIGQUIT退出時會產生core檔案,在這個意義上類似於一個程式錯誤訊號.

4) SIGILL 執行了非法指令.通常是因為可執行檔本身出現錯誤,或者試圖執行資料區段. 堆疊溢位時也有可能產生這個訊號.

5) SIGTRAP 跟蹤陷阱訊號,由斷點指令或其它trap指令產生.由debugger使用.

6) SIGABRT 調用abort時產生的訊號,將會使進程非正常結束。

6) SIGIOT IO錯誤訊號.

7) SIGBUS 系統匯流排錯誤時產生的訊號,非法地址,包括記憶體位址對齊(alignment)出錯.eg: 訪問一個四個字長的整數, 但其地址不是4的倍數.

8) SIGFPE 在發生致命的算術運算錯誤時發出.不僅包括浮點運算錯誤,還包括溢出及除數為0等其它所有的算術的錯誤.

9) SIGKILL 可以終止任何進程的訊號,只能由管理員發出,該訊號不會被捕捉和忽略。

10) SIGUSR1 留給使用者使用,使用者可在應用程式中自行定義。

11) SIGSEGV 試圖訪問未分配給自己的記憶體,或試圖往沒有寫入權限的記憶體位址寫資料,非法使用記憶體位址訊號。

12) SIGUSR2 留給使用者使用

13) SIGPIPE 當一個進程對管道進行完讀後進行寫時產生的訊號。

14) SIGALRM 時鐘定時訊號,由alarm函數設定的時間終止時產生的訊號。

15) SIGTERM 程式結束(terminate)訊號,與SIGKILL不同的是該訊號可以被阻塞和處理.通常用來要求程式自己正常退出.shell命令kill預設產生這個訊號.

17) SIGCHLD 子進程結束或中斷時產生該訊號,父進程會收到這個訊號.通過該訊號父進程可以知道子進程的運行情況。但大多數情況下此訊號會被忽略。

18) SIGCONT 讓一個停止(stopped)的進程繼續執行.本訊號不能被阻塞.

19) SIGSTOP 停止(stopped)進程的執行.注意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行.本訊號不能被阻塞,處理或忽略.

20) SIGTSTP 停止進程的運行,但該訊號可以被處理和忽略.使用者鍵入SUSP字元時(通常是Ctrl-Z)發出這個訊號

21) SIGTTIN 當後台作業要從使用者終端讀資料時,中斷磁碟機產生的訊號。當讀入資料的進程阻塞或忽略這個訊號,或讀取資料的進程所在進程組是一個孤立進程組時,訊號不會發生,並且發生讀錯誤。errno被設為ETO

22) SIGTTOU 類似於SIGTTIN,當後台作業要從使用者終端讀資料時,中斷磁碟機產生的訊號。當讀入資料的進程阻塞或忽略這個訊號,或讀取資料的進程所在進程組是一個孤立進程組時,訊號不會發生,並且發生讀錯誤。errno被設為ETO。唯一不同的是進程可以選擇後台寫。

23) SIGURG socket上出現緊急情況是發出的資訊。

24) SIGXCPU 超過CPU時間資源限制.這個限制可以由getrlimit/setrlimit來讀取/改變

25) SIGXFSZ 超過檔案大小資源限制.

26) SIGVTALRM 虛擬時鐘訊號.類似於SIGALRM,但是計算的是該進程佔用的CPU時間.

27) SIGPROF 類似於SIGALRM/SIGVTALRM,但包括該進程用的CPU時間以及系統調用的時間.

28) SIGWINCH 視窗大小改變時發出.

29) SIGIO 檔案描述符準備就緒,可以開始進行輸入/輸出操作.

30) SIGPWR Power failure 電源失效訊號。

31)SIGEMT即時硬體發生錯誤時產生的訊號。

有兩個訊號可以停止進程:SIGTERM和SIGKILL。 SIGTERM比較友好,進程能捕捉這個訊號,根據您的需要來關閉程式。在關閉程式之前,您可以結束開啟的記錄檔案和完成正在做的任務。在某些情況下,假如進程進行中作業而且不能中斷,那麼進程可以忽略這個SIGTERM訊號。

對於SIGKILL訊號,進程是不能忽略的。這是一個 “我不管您在做什麼,立刻停止”的訊號。假如您發送SIGKILL訊號給進程,Linux就將進程停止在那裡。

註:有六個訊號被稱為作業訊號,SIGCHLD,SIGCONT,SIGSTOP,SIGSTP,SIGTTNI,SIGTTOU.這些訊號都是用於協調和組織各個進程的,也就是實現所謂的作業控制。通常情況下使用者不需要對這些訊號進行處理,shell會自動完成對這些訊號的處理工作。訊號之間是相互影響的,當進程接收到SIGCONT訊號時,被系統懸掛的SIGSTOP,SIGSTP,SIGTTIN,SIGTTOU將失效。同樣進程接收到SIGSTOP,SIGSTP,SIGTTIN,SIGTTOU時,SIGCONT將失效。

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。