Linux下C編程:信號處置方法實習運用
Linux下C編程:信號處置方法實習運用
信號是用於一步作業的。當一個信號發生時,程序會按照現已設定好的程序來實行相應的操作。
進程對信號處置的方法通常有兩種:
1、捕捉信號:當一個信號發送個進程時,該進程會調用此信號註冊的信號處置函數,來結束相應的操作。對應於每個信號系統通常會有相應的默許處置函數(通常爲間斷進程)。所以可以設置信號爲默許的處置函數。
2、忽略信號。當信號發送時,進程忽略信號。
注:有兩個信號是無法捕捉和忽略的SIGKILL和SIGSTOP。它們是提供給管理員,可以在任何時辰間斷某個進程而設定的。
對信號處置的需要:在用戶編程時有時進程需要對某信號進行當即照應。對有些實時進程來說,當它實行時是不願意被打斷的,這是就需要把接收的信號掛起。
信號的運用:
信號最常見的一個運用便是發生差錯時通知進程結束。關於許多差錯,如bus差錯,浮點差錯,調用內存差錯等都有相應的信號通知進程。
此外信號還有其他用途。如作業一個大型的科學運算程序,如果在一個無量循環頂用printf來閃現作業情況,必定構成作業功率的下降。所以通過信號,人爲的向進程發送消息,來查看作業情況,就大大的提高了作業功率。
Linux下C編程:信號具體含義說明
信號及其簡介
信號是一種進程通訊的方法,他運用於異步作業的`處置。信號的結束是一種軟間斷。它被髮送爲一個正在作業的進程,已奉告進程某個作業發生了。
1) SIGHUP本信號在用戶終端聯接(正常或非正常)結束時宣告,通常是在終端的控制進程結束時,通知同一session內的各個作業,這時它們與控制終端不再有關.
2) SIGINT程序間斷(interrupt)信號,通常是從終端宣告間斷指令如ctrl+c或鍵
3) SIGQUIT和SIGINT類似,但由QUIT字符(通常是Ctrl+)來控制.進程在因收到SIGQUIT退出時會發生core文件,在這個含義上類似於一個程序差錯信號.
4) SIGILL實行了不合法指令.通常是因爲可實行文件本身出現差錯,或許妄圖實行數據段.庫房溢出時也有可以發生這個信號.
5) SIGTRAP跟蹤騙局信號,由斷點指令或其它trap指令發生.由debugger運用.
6) SIGABRT調用abort時發生的信號,將會使進程非正常結束。
6) SIGIOT IO差錯信號.
7) SIGBUS系統總線差錯時發生的信號,不合法地址,包括內存地址對齊(alignment)犯錯:訪問一個四個字長的整數,但其地址不是4的倍數.
8) SIGFPE在發生喪身的算術運算差錯時宣告.不只包括浮點運算差錯,還包括溢出及除數爲0等其它一切的算術的差錯.
9) SIGKILL可以間斷任何進程的信號,只能由管理員宣告,該信號不會被捕捉和忽略。
10) SIGUSR1留給用戶運用,用戶可在運用程序中自行定義。
11) SIGSEGV妄圖訪問未分配給自個的內存,或妄圖往沒有寫權限的內存地址寫數據,不合法運用內存地址信號。
12) SIGUSR2留給用戶運用
13) SIGPIPE當一個進程對管道進行完讀後進行寫時發生的信號。
14) SIGALRM時鐘守時信號,由alarm函數設定的時辰間斷時發生的信號。
15) SIGTERM程序結束(terminate)信號,與SIGKILL不一樣的是該信號可以被阻塞和處置.通常用來需要程序自個正常退出l指令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將失效。
Linux下C編程:信號處置
信號處置是linux程序的一個特徵。用信號處置來仿照操作系統的間斷功用。要想運用信號處置功用,你要做的便是填寫一個信號處置函數即可。
#include
#include
#include
#include
int flag = 1;
void func(int sig)
{
printf("I get a signal!n");
flag = 0;
}
int main()
{
signal(SIGINT, func);
printf("pid:%ldn",(long)getpid());
while(flag)
pause();
return 0;
}實行,
#gcc sig.c -o sig
#./sig
在另一終端:
#kill -INT 333//333是程序打印出的進程號
-
(熱門)西遊記續寫作文10篇
在生活、工作和學習中,大家對作文都不陌生吧,通過作文可以把我們那些零零散散的思想,聚集在一塊。那要怎麼寫好作文呢?下面是小編收集整理的西遊記續寫作文10篇,希望對大家有所幫助。西遊記續寫作文篇1唐僧師徒一行取得真經後,各自成佛,現在他們過的怎麼樣了?讓我們去...
-
[經典]西遊記作文4篇
在日常的學習、工作、生活中,大家一定都接觸過作文吧,作文是由文字組成,經過人的思想考慮,通過語言組織來表達一個主題意義的文體。相信許多人會覺得作文很難寫吧,以下是小編幫大家整理的西遊記作文4篇,歡迎大家借鑑與參考,希望對大家有所幫助。西遊記作文篇1我想《西...
-
經典語文評課稿
作爲一名教職工,就難以避免地要準備評課稿,評課有利於信息的及時反饋、評價與調控,調動教師教育教學的積極性和主動性。評課稿要怎麼寫呢?下面是小編爲大家收集的經典語文評課稿,僅供參考,希望能夠幫助到大家。經典語文評課稿1因爲流感,六(3)班的學生放假了,邀請南飛的雁...
-
[精]讀西遊記作文9篇
無論在學習、工作或是生活中,大家都不可避免地要接觸到作文吧,作文是由文字組成,經過人的思想考慮,通過語言組織來表達一個主題意義的文體。爲了讓您在寫作文時更加簡單方便,以下是小編幫大家整理的讀西遊記作文9篇,歡迎大家借鑑與參考,希望對大家有所幫助。讀西遊記...
相關文章
- Excel專家教你countif函數的使用方法-countif函數教程
- UNIX/Linux下C語言的學習路線
- Excel中進行countif函數使用方法
- linux中php安裝CURL擴展方法示例教程
- 有關Linux下MySQL數據庫二進制日誌恢復方法
- linux就業前景還不錯,想培訓一下linux系統,以後在這方面發展
- culture是什麼意思 civilization+culture含義區別用法
- 面試英語:Technical Qualifications 篇
- 英文簡歷技巧:English curriculum pattern
- 英語面試基本問答:Technical Qualifications