信号机制是一种使用信号来进行进程之间传递消息的方法,信号的全称为软中断信号,简称软中断。信号的本质是软件层次上对中断的一种模拟(软中断)。它是一种异步通信的处理机制,事实上,进程并不知道信号何时到来。通俗来讲,信号就是系统响应某些条件而产生的一个事件。
有以下几种方式:
signal()函数可以为一个特定的信号(除了无法捕获的SIGKILL和SIGSTOP信号)注册相应的处理函数。
#include <signal.h> void (*signal(int signum, void (*handler)(int)))(int);
参数signum表示所注册函数针对的信号名称,参数handler通常是指向调用函数的函数指针,即所谓的信号处理函数。handler可以是用户自定义函数,也可以是两个<signal.h>中定义的值:1、SIG_IGN:忽略signum指出的信号。2、SIG_DFL:调用系统定义的缺省信号处理。
注意:并非程序执行到signal调用时就立即对指定的信号进行操作,这个函数只是告诉程序在遇到这个信号时用什么函数来处理。
将信号发送给一个进程或进程组
#include <signal.h> #include <sys/types.h> int kill(pid_t pid, int sig);
其中pid参数的取值如下:
pid参数取值及其定义
pid | 含义 |
---|---|
pid > 0 | 将信号发送给进程号为pid的进程 |
pid = 0 | 将信号发送给与目前进程相同进程组的所有进程 |
pid < 0 && pid != -1 | 向进程组ID为pid绝对值的进程组中的所有进程发送信号 |
pid = -1 | 除发送给自身进程外,还向所有进程ID大于1的进程发送信号 |
sig参数对应的是信号编码,当其为0(即空信号)时,实际不发送任何信号,但照常进行错误检查。因此可用于检查目标进程是否存在,以及当前进程是否具有向目标发送信号的权限。