信號(未完)

#名稱: 信號
#參考資料: Unix高級編程
#作者 一路向北
#時間 2013-8-13 14:57
#版本 RetHat 4.1.2-48
#內核版本 2.6.18-194.
#說明: 由於用到相關的知識,所以從第十章開始寫
引言:
信號是軟件中斷,它提供了一種處理異步事件的方法,具體的表面上的操作方法是
終端用戶鍵入中斷鍵,則會通過信號機構停止一個程序。


1、S V R 4和4 . 3 + B S D均有3 1種不同的信號,都是以SIG開頭,
特別注意:
這些信號被設爲整數但是沒有0,0是要有特殊作用的,所以不用,在kill函數中會提到
kill(2)桉樹可以將信號發送給另一個進程或者進程組。但是有限制,接收信號進程和發送信號進程的所有者必須相同,或者發送信號進程的所有者必須是超級用戶
kill(1)命令將信號發送給其他進程。此程序是kill函數的界面,用來終止一個失控的後臺進程
當檢測到某種軟件條件已經發生,並將其通知有關進程時也產生信號。這裏並不是硬件條件,而是軟件條件如被0除。


信號的作用:
信號是典型的異步事件
產生信號的時間對進程而言屬於隨機出現的。
進程在測試到一個變量(eg:errno)來判斷是否發生一個信號,之後必須告訴內核,某信號已經發生了,
趕緊做下面的三件事情中的一件事情:
(1)忽略此信號   大多數的信號都可以用這種方法除了SIGKILL和SIGSTOP,請想想爲什麼?
(2)捕捉信號    爲了做到這一點,還需要內核多出點力,在該信號發生時調用一個用戶函數,可以在用戶函數中
執行對這個事件的操作。
eg:如果編寫一個命令解釋器,當用戶用鍵盤產生中斷信號時希望返回到主循環,終止系統增在爲該用戶執行的命令。
如果捕捉到SIGCHLD信號,則表示子進程已經終止。所以此信號的捕捉函數可以調用waitpid以取得該子進程的ID以及其種子狀態。
(3)執行系統默認動作,對大多數的信號系統的默認動作是終止該進程
在/usr/include中定義的各信號的名字和使用方法
English name 中文名 缺省 作用或使用方法
SIGABRT 夭折信號 終止w/core 進程調用abort函數時產生這種信號
SIGALRM 鬧鐘信號 終止 由alarm函數設置的時間已經超過後產生此信號
SIGINT 按某終端時產生 在終端上岸DELETE鍵產生的中斷信號,停止一個
已經失去控制程序的方法
SIGSEGV 硬件異常 除數爲0.無效的存儲訪問等。這些條件由硬件
檢測到並通知內核,內核產生適當信號
SIGBUS 硬件故障 終止w/core
SIGCHLD 子進程狀態改變 忽略
SIGCONT 使暫停進程繼續 繼續/忽略
SIGEMT 硬件故障 終止w/core
SIGFPE 算術異常 終止w/core
SIGHUP 連接斷開 終止
SIGILL 非法指令 終止w/core
SIGINFO 鍵盤狀態請求 忽略
SIGINT 終端中斷符 終止
SIGIO 一部I/O 終止/忽略
SIGIOT 硬件故障 終止w/core
SIGKILL 終止 終止
SIGPIPE 寫至無讀進程管道 終止
SIGPOLL 可輪詢事件(poll) 終止
SIGPROF 梗概時間超時(setitimer) 終止
SIGQUIT 終端退出符 終止w/core
SIGPWR 電源失效/再啓動 忽略
SIGSEGV 無效存儲訪問 終止w/core
SIGSTOP 停止 暫停進程
SIGSYS 無效系統調用 終止w/core
SIGTERM 終止 終止
SIGTRAR 硬件故障 終止w/core
SIGTSTP 終端掛起符 停止進程
SIGTTIN 後臺從控制tty讀 停止進程
SIGTTOU 後臺想控制tty寫 停止進程
SIGURG 緊急情況 忽略
SIGUSR1 用戶定義信號 終止
SIGUSR2 用戶定義信號 終止
SIGVTSLRM 虛擬時間鬧鐘(setitimer) 終止
SIGWINCH 終端窗口大小 忽略
SIGCPU 超過CPU限制(setrlimit) 終止w/core
SIGXFSZ 超過文件長度限制 終止w/core
終止w/core:表示在進程當前工作目錄的core文件中複製了該進程的存儲圖像
 






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章