LinuxIPC之信号

1.信号概念
信号是进程在运行过程中, 由自身产生或由进程外部发过来的消息( 事件) 。 信号是硬件中断的软
件模拟(软中断)。 每个信号用一个整型常量宏表示, 以 SIG 开头, 比如 SIGCHLD、 SIGINT 等.信号的生成来自内核, 让内核生成信号的请求来自 3 个地方:
(1)用户: 用户能够通过输入 CTRL+cCtrl+\, 或者是终端驱动程序分配给信号控制字符的其他任何键来请求内核产生信号;
(2)内核: 当进程执行出错时, 内核会给进程发送一个信号, 例如非法段存取(内存访问违规)、 浮点数溢出等;
(3)进程: 一个进程可以通过系统调用 kill 给另一个进程发送信号, 一个进程可以通过信号和另外一个进程进行通信。
由进程的某个操作产生的信号称为同步信号 (synchronous signals),例如除 0; 由像用户击键这样的进
程外部事件产生的信号叫做异步信号 (asynchronous signals)
进程接收到信号以后, 可以有如下 3 种选择进行处理:
(1)接收默认处理: 接收默认处理的进程通常会导致进程本身消亡。 例如连接到终端的进程, 用户按下 CTRL+c, 将导致内核向进程发送一个 SIGINT 的信号, 进程如果不对该信号做特殊的处理, 系统将采用默认的方式处理该信号, 即终止进程的执行; signal(SIGINT,SIG_DFL)
(2)忽略信号: 进程可以通过代码, 显示地忽略某个信号的处理, 例如: signal(SIGINT,SIG_IGN);但是某些信号是不能被忽略的 ,例如 9 号信号;
(3)捕捉信号并处理: 进程可以事先注册信号处理函数, 当接收到信号时, 由信号处理函数自动捕
捉并且处理信号。
有两个信号既不能被忽略也不能被捕捉, 它们是 SIGKILL SIGSTOP。 即进程接收到这两个信号
后, 只能接受系统的默认处理, 即终止进程。 SIGSTOP 是暂停进程。

First the signals described in the original POSIX.1-1990 standard.
信号默认处理行为
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at terminal
SIGTTIN 21,21,26 Stop Terminal input for background process
SIGTTOU 22,22,27 Stop Terminal output for background process


猜你喜欢

转载自blog.csdn.net/u013009576/article/details/70230590