版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youngyangyang04/article/details/48576243
10.1 引言
信号是软件中断.很多比较重要的应用程序都需要处理信号.
信号提供一种处理异步时间的方法,例如,终端用户键入中断键,会通过
信号机制停止一个程序,或及早终止管道中的下一个程序.
10.2 信号概念
首先每个信号都有一个名字.这些名字都是以SIG开头.例如,SIGABRT是夭折信号,当进程调用
abort函数是产生这种信号.
10.3 函数signal
UNIX系统信号机制最简单的接口是signal函数
#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int);
signo参数是一下图中的信号名.func的值是常量SIG_IGN,常量SIG_DFL或者当接到此信号后要调用的函数的地址.SIG_IGN向内核表示忽略此信号(SIGKILL和SIGSTOP不能忽略).SIG_DFL标示接到信号后的动作是系统默认动作
程序启动
当执行一个程序时,所有信号的状态都是系统默认或者忽略
进程创建
当一个进程调用fork时,其子进程集成父进程的信号处理方式
10.4 不可靠的信号
不可靠再这里指:信号可能会丢失,一个信号发生了,但进程却可能一直不知道这一点
10.5 中断的系统调用
10.6 可重入函数
进程捕捉到信号并对其进行处理时, 进程正在执行的正常指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令.
10.7 SIGCLD语义
10.8 可靠信号术语和语义
10.9 函数kill和raise
kill 函数将信号发送给进程或进程组,raise函数则允许进程相自身发送信号
#include<signal.h>
int kill (pid_t pid, int signo);
int raise (int signo);