進程中的信號是用於進程之間通信的一種簡單消息,通常是下表中的一個標號數值,並且不攜帶任何其它的信息。
例如當一個子進程終止或結束時,就會產生一個標號爲17 的SIGCHILD 信號發送給父進程,以通知父進程有關子進程的當前狀態。
關於一個進程如何處理收到的信號,一般有兩種做法:
一是程序的進程不去處理,此時該信號會由系統相應的默認信號處理程序進行處理;
二是進程使用自己的信號處理程序來處理信號。
/linux-0.11/kernel/signal.h定義信號如下 :
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGUNUSED 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
標號
|
名稱
|
說明
|
默認操作
|
1
|
SIGHUP
|
(Hangup) 當你不再控制終端時內核會產生該信號,
或者當你關閉Xterm 或斷modem。由於後臺程序沒有控制的終端,因而它們常用SIGUP 來發出需要重新讀取其配置文件的信號。
|
(Abort)
掛斷控制中斷或進程。
|
2
|
SIGINT
|
(Interrupt) 來自鍵盤的終端。通常終
驅動程序會將其與^C 綁定。
|
(Abort)
終止程序。
|
3
|
SIGQUIT
|
(Quit) 來自鍵盤的終端。通常終端驅動程序會將其與^\綁定。
|
(Dump) 程序被終止併產生dump core 文件。
|
4
|
SIGILL
|
(Illegal Instruction) 程序出錯或者執行了一個非法的操作指令。
|
(Dump) 程序被終止併產生dump core 文件。
|
5
|
SIGTRAP
|
(Breakpoint/Trace Trap) 調試用,跟蹤斷點。
|
|
6
|
SIGABRT
|
(Abort) 放棄執行,異常結束。
|
(Dump) 程序被終止併產生dump core 文件。
|
6
|
SIGIOT
|
(IO Trap) 同SIGABRT
|
(Dump) 程序被終止併產生dump core 文件。
|
7
|
SIGUNUSED
|
(Unused) 沒有使用。
|
|
8
|
SIGFPE
|
(Floating Point Exception) 浮點異常。
|
(Dump) 程序被終止併產生dump core 文件。
|
9
|
SIGKILL
|
(Kill) 程序被終止。該信號不能被捕獲或者被忽略。想立刻終止一個進程,就發送信號9。注意程序將沒有任何機會做清理工作。
|
(Abort) 程序被止。
|
10
|
SIGUSR1
|
(User defined Signal 1) 用戶定義的信號。
|
(Abort) 程序被止。
|
11
|
SIGSEGV
|
(Segmentation Violation) 當程序引用無效的內存時會產生此信號。比如:尋址沒有映射的內存;尋址未許可的內存。
|
(Dump) 程序被終止併產生dump core 文件。
|
12
|
SIGUSR2
|
(User defined Signal 2) 保留給用戶程序用於IPC 或其它目的。
|
(Abort) 程序被止。
|
13
|
SIGPIPE
|
(Pipe) 當程序向一個套接字或管道寫時由於沒有讀者而產生該信號。
|
(Abort) 程序被止。
|
14
|
SIGALRM
|
(Alarm) 該信號會在用戶調用alarm 系統調用所設置的延遲秒數到後產生。該信號常用判別於系統調用超時。
|
(Abort) 程序被止。
|
15
|
SIGTERM
|
(Terminate) 用於和善地要求一個程序終止。它是kill的默認信號。與SIGKILL 不同,該信號能被捕獲,這樣就能在退出運行前做清理工作。
|
(Abort) 程序被止。
|
16
|
SIGSTKFLT
|
(Stack fault on coprocessor) 協處理器堆棧錯誤。
|
(Abort) 程序被止。
|
17
|
SIGCHLD
|
(Child) 父進程發出。停止或終止子進程。可改變其含義挪作它用。
|
(Ignore) 子進程停止或結束。
|
18
|
SIGCONT
|
(Continue) 該信號致使被SIGSTOP 停止的進程恢復運行。可以被捕獲。
|
(Continue) 恢復進程的執行。
|
19
|
SIGSTOP
|
(Stop) 停止進程的運行。該信號不可被捕獲或忽略
|
(Stop) 停止進程運行。
|
20
|
SIGTSTP
|
(Terminal Stop) 向終端發送停止鍵序列。該信號可以被捕獲或忽略。
|
(Stop) 停止進程運行。
|
21
|
SIGTTIN
|
(Terminal Input on Background) 後臺進程試圖從一個不再被控制的終端上讀取數據,此時該進程將被停止,直到收到SIGCONT 信號。該信號可以被捕獲或
忽略。
|
(Stop) 停止進程運行。
|
22
|
SIGTTOU
|
(TTY Output on Background) 後臺進程試圖向一個不再被控制的終端上輸出數據,此時該進程將被停止,直到收到SIGCONT 信號。該信號可被捕獲或忽略。
|
(Stop) 停止進程運行。
|