在终端输入kill -1可以列出Linux中的所有信号。
信号处理
信号最为进程间通信的机制,主要用于异步事件。
有3种基本处理信号的方法:
- 默认。系统为每一个信号都设置了默认的处理方式,通常为终止进程。
- 捕捉信,使进程执行指定的程序
- 忽略信号,不处理,进程继续执行。
产生信号
信号的产生主要有以下几种
- 通过键盘终端产生
- 通过终端中的kill命令产生
kill -信号类型 进程号 进程号通过ps -aus命令获取
- 调用系统函数向进程发送
kill()函数
kill()函数主要用于向指定的进程或进程组发送线信号
#include<sys/types.h>
#include<signal.h>
int kill(pid_t pid,int sig);
pid:进程号或进程组号
sig:发送信号类型的编号
pid=0:将信号发送到当前进程所在的进程组的每一个进程
pid=-1:将信号发送给除了init进程外的当前进程中有权发送的所有进程
pid<-1:将信号发送给进程组(-pid)中的每一个进程
如果参数sig为0,没有信号发送,但会进行错误检查
raise()函数
用于将信号发送给当前进程
#include<signal.h>
int raise(int sig);
sig:发送的信号类型的编号
函数调用成功,返回0;失败返回非0
alarm()函数
用于为发送的信号设定一个时间警告,使系统在设定的时间之后发送信号
#include<unistd.h>
unsigned int alarm(unsigned int seconds);
second:为设定的时间值。如果为0,警告时钟将无效。
alerm()函数安排在seconds时间后,发送一个信号SIGNALRM给进程。默认情况下,进程接收到SIGALRM信号会终止进程,如果不希望终止进程,可以在进程捕获到该信号后修改默认的处理函数。
调用alarm()函数后,之前设置的的任何警告时钟都会被取消。
捕捉信号
signal()函数
用于修改某个信号的处理方法
#include<signal.h