(1)信号概念
信号可以完成进程间通信,但是它的传输只能是一个信号值。
信号是Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些行动。我们用术语生成来表示一个信号的产生,使用术语捕获表示接收到一个信号。
信号是由于某些错误条件而生成的,如内存段冲突、非法指令等等。
信号的名称在头文件signal.h中定义,它们都以SIG开头,部分信号如下:
(2)发送信号
我们发送信号使用kill函数,它的定义如下
kill把参数sig给定的信号发送给参数pid给出的进程号所指定的进程,如果成功则返回0,如果失败则返回-1。
我们演示一遍:
首先是代表一个正在执行的进程for.c:
接下来是发送信号的mykill.c
我们将for程序后台运行,然后查看他的进程号,使用mykill结束掉for程序,再次查看发现for程序已经结束。
(3)捕获信号
程序捕获的信号,对信号的响应有三种方式,①默认,②忽略,③自定义
默认就是按照信号本身的意义进行。忽略就是捕获到信号但是忽略掉信号。我们演示自定义方式。自定义方式使用下面的函数:
演示signal文件如下:
它将我们从键盘上获取的终端终止信号(Ctrl+C)捕获到,然后打印出它的信号值。
我们重新开启一个终端,结束掉signal
我们经常使用此方式解决父子进程中产生的僵死进。(可以查看我的博客,僵死进程的处理)