Linux信号(signal)
信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程本身。
Linux下信号(signal)的使用
#include <signal.h>//signal所使用的函数头文件
typedef void (*sighandler_t)(int);//signal注册函数
sighandler_t signal(int signum, sighandler_t handler)//signal信号处理函数
sighandler_t signal(int signum, sighandler_t handler)函数中:
第一个参数为要处理的信号值,在Linux下kill -l
可以查看;
第二个参数为信号处理函数指针(函数入口地址)。
Linux常用的信号:
Linux下使用信号的流程:
- 注册信号;
- 编写信号处理函数进行信号接收到以后的处理。
按流程编写测试程序:
#include<stdio.h>
#include<signal.h>//包含相关头文件
void handle(int num) //2.信号处理
{
printf("接收到信号,在这做相应的事\n信号值=%d\n");
}
int main(int argc,char *argv[])
{
signal(SIGINT,handle); //1.注册信号
printf("信号注册完成\n");
while(1)
{
printf("主进程在做事\n");
sleep(1);
}
return 0;
}
运行程序
^C处表示使用按键产生中断(Ctrl+c)
^Z是Ctrl+z,产生kill信号,与kill -9信号相同,是不可捕捉的信号,程序强制退出