一、目标
- 信号概念
- 信号安装signal、sigaction
- 信号集操作函数
- 时钟
二、信号
1、概念
- 信号是系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。可以是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令等
- 进程可以生成信号、捕捉并响应信号或屏蔽信号
2、用途
进程间通信,之前提到进程之间的数据是不能进行互通的,所以就要用到进程间通信技术,这个信号就是其中之一 ,就类似Qt里面的信号和槽(在界面切换的时候可以用到),(开发Qt的时候实际他就是参照linux内核编程进行开发)
3、回顾kill命令
kill不是杀死而是发送:我们要突破之前的一个错误认知,单纯的认为kill -9 pid就是杀死进程,实际上并不是这样,要把他理解为发送第九号信号(SIGKILL),去结束后面的pid所对应的进程。查询kill支持的信号,如下图所示
从上图仔细观察会发现,中间少了32号、33号,这其实是做一个分界线,1-31被归为不可靠信号,43到之后的被归为可靠信号(有兴趣自行了解)
4、信号名称
信号的名称是在头文件 signal.h里定义的,部分名称如图
5、进程与信号(signal库函数)
如果一个进程想要通知另一个进程做一些事情,就可以利用信号,所以涉及到signal库函数,如下
举例说明
int kill(pid_t pid, int sig);
进程可以通过调用kill向包括它本身在内的另一个进 程发送信号。如果程序没有发送该信号的权限,对 kill的调用就将失败。
kill函数的作用是把参数sig给定的信号发送给标识号为pid的进程。 要想发送一个信号,发送者进程必须拥有相应的权限。这通常意味着两个进程必须拥有同样的用户ID