进程中的信号是用于进程之间通信的一种简单消息,通常是下表中的一个标号数值,并且不携带任何其它的信息。
例如当一个子进程终止或结束时,就会产生一个标号为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) 停止进程运行。
|
转载于:https://blog.51cto.com/su007/965597