linux 信号没有被处理方法,[计算机]Linux 信号signal处理机制.doc
[計(jì)算機(jī)]Linux 信號(hào)signal處理機(jī)制
Linux 信號(hào)signal處理機(jī)制
信號(hào)是Linux編程中非常重要的部分,本文將詳細(xì)介紹信號(hào)機(jī)制的基本概念、Linux對(duì)信號(hào)機(jī)制的大致實(shí)現(xiàn)方法、如何使用信號(hào),以及有關(guān)信號(hào)的幾個(gè)系統(tǒng)調(diào)用。 信號(hào)機(jī)制是進(jìn)程之間相互傳遞消息的一種方法,信號(hào)全稱為軟中斷信號(hào),也有人稱作軟中斷。從它的命名可以看出,它的實(shí)質(zhì)和使用很象中斷。所以,信號(hào)可以說是進(jìn)程控制的一部分。 一、信號(hào)的基本概念 本節(jié)先介紹信號(hào)的一些基本概念,然后給出一些基本的信號(hào)類型和信號(hào)對(duì)應(yīng)的事件。基本概念對(duì)于理解和使用信號(hào),對(duì)于理解信號(hào)機(jī)制都特別重要。下面就來看看什么是信號(hào)。 1、基本概念 軟中斷信號(hào)(signal,又簡(jiǎn)稱為信號(hào))用來通知進(jìn)程發(fā)生了異步事件。進(jìn)程之間可以互相通過系統(tǒng)調(diào)用kill發(fā)送軟中斷信號(hào)。內(nèi)核也可以因?yàn)閮?nèi)部事件而給進(jìn)程發(fā)送信號(hào),通知進(jìn)程發(fā)生了某個(gè)事件。注意,信號(hào)只是用來通知某進(jìn)程發(fā)生了什么事件,并不給該進(jìn)程傳遞任何數(shù)據(jù)。 收 到信號(hào)的進(jìn)程對(duì)各種信號(hào)有不同的處理方法。處理方法可以分為三類:第一種是類似中斷的處理程序,對(duì)于需要處理的信號(hào),進(jìn)程可以指定處理函數(shù),由該函數(shù)來處 理。第二種方法是,忽略某個(gè)信號(hào),對(duì)該信號(hào)不做任何處理,就象未發(fā)生過一樣。第三種方法是,對(duì)該信號(hào)的處理保留系統(tǒng)的默認(rèn)值,這種缺省操作,對(duì)大部分的信 號(hào)的缺省操作是使得進(jìn)程終止。進(jìn)程通過系統(tǒng)調(diào)用signal來指定進(jìn)程對(duì)某個(gè)信號(hào)的處理行為。 在進(jìn)程表的表項(xiàng)中有一個(gè)軟中斷信號(hào)域,該域中每一位對(duì)應(yīng)一個(gè)信號(hào),當(dāng)有信號(hào)發(fā)送給進(jìn)程時(shí),對(duì)應(yīng)位置位。由此可以看出,進(jìn)程對(duì)不同的信號(hào)可以同時(shí)保留,但對(duì)于同一個(gè)信號(hào),進(jìn)程并不知道在處理之前來過多少個(gè)。 2、信號(hào)的類型 發(fā)出信號(hào)的原因很多,這里按發(fā)出信號(hào)的原因簡(jiǎn)單分類,以了解各種信號(hào): (1) 與進(jìn)程終止相關(guān)的信號(hào)。當(dāng)進(jìn)程退出,或者子進(jìn)程終止時(shí),發(fā)出這類信號(hào)。 (2) 與進(jìn)程例外事件相關(guān)的信號(hào)。如進(jìn)程越界,或企圖寫一個(gè)只讀的內(nèi)存區(qū)域(如程序正文區(qū)),或執(zhí)行一個(gè)特權(quán)指令及其他各種硬件錯(cuò)誤。 (3) 與在系統(tǒng)調(diào)用期間遇到不可恢復(fù)條件相關(guān)的信號(hào)。如執(zhí)行系統(tǒng)調(diào)用exec時(shí),原有資源已經(jīng)釋放,而目前系統(tǒng)資源又已經(jīng)耗盡。 (4) 與執(zhí)行系統(tǒng)調(diào)用時(shí)遇到非預(yù)測(cè)錯(cuò)誤條件相關(guān)的信號(hào)。如執(zhí)行一個(gè)并不存在的系統(tǒng)調(diào)用。 (5) 在用戶態(tài)下的進(jìn)程發(fā)出的信號(hào)。如進(jìn)程調(diào)用系統(tǒng)調(diào)用kill向其他進(jìn)程發(fā)送信號(hào)。 (6) 與終端交互相關(guān)的信號(hào)。如用戶關(guān)閉一個(gè)終端,或按下break鍵等情況。 (7) 跟蹤進(jìn)程執(zhí)行的信號(hào)。 Linux支持的信號(hào)列表如下。很多信號(hào)是與機(jī)器的體系結(jié)構(gòu)相關(guān)的,首先列出的是POSIX.1中列出的信號(hào): 信號(hào) 值 處理動(dòng)作 發(fā)出信號(hào)的原因 ---------------------------------------------------------------------- SIGHUP 1 A 終端掛起或者控制進(jìn)程終止 SIGINT 2 A 鍵盤中斷(如break鍵被按下) SIGQUIT 3 C 鍵盤的退出鍵被按下 SIGILL 4 C 非法指令 SIGABRT 6 C 由abort(3)發(fā)出的退出指令 SIGFPE 8 C 浮點(diǎn)異常 SIGKILL 9 AEF Kill信號(hào) SIGSEGV 11 C 無效的內(nèi)存引用 SIGPIPE 13 A 管道破裂: 寫一個(gè)沒有讀端口的管道 SIGALRM 14 A 由alarm(2)發(fā)出的信號(hào) SIGTERM 15 A 終止信號(hào) SIGUSR1 30,10,16 A 用戶自定義信號(hào)1 SIGUSR2 31,12,17 A 用戶自定義信號(hào)2 SIGCHLD 20,17,18 B 子進(jìn)程結(jié)束信號(hào) SIGCONT 19,18,25 進(jìn)程繼續(xù)(曾被停止的進(jìn)程) SIGSTOP 17,19,23 DEF 終止進(jìn)程 SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵 SIGTTIN 21,21,26 D 后臺(tái)進(jìn)程企圖從控制終端讀 SIGTTOU 22,22,27 D 后臺(tái)進(jìn)程企圖從控制終端寫 下面的信號(hào)沒在POSIX.1中列出,而在SUSv2列出 信號(hào) 值 處理動(dòng)作 發(fā)出信號(hào)的原因 -------------------------------------------------------------------- SIGBUS 10,7,10 C 總線錯(cuò)誤(錯(cuò)誤的內(nèi)存訪問) SIGPOLL A Sys V定義的Pollable事件,與SIGIO同義 SIGPROF 27,27,29 A Profiling定時(shí)器到 SIGSYS 12,-,12 C 無效的系統(tǒng)調(diào)用 (SVID) SIGTRAP 5 C 跟蹤/斷點(diǎn)捕
總結(jié)
以上是生活随笔為你收集整理的linux 信号没有被处理方法,[计算机]Linux 信号signal处理机制.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 适合一家人的微信群名527个
- 下一篇: Linux as4开启telnet,li