关于信号的理解:软件中断,异步发生,突发事件。
类似与单片机里的中断吧。
我的第一个信号编程范例:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
void sig_usr(int signo)
{
if(signo==SIGUSR1)
{
printf("收到了SIGUSR1的信号!\n");
}
else if(signo==SIGUSR2)
{
printf("收到了SIGUSR2的信号!\n");
}
else
{
printf("收到了未捕抓到的信号%d!\n",signo);
}
}
int main(int argc,char *const *argv)
{
if(signal(SIGUSR1,sig_usr)==SIG_ERR)
{
printf("无法捕捉到SIGUSER1的信号!\n");
}
if(signal(SIGUSR2,sig_usr)==SIG_ERR) //如果没有设置信号处理函数,则返回SIG_ERR(函数指针),并设置errno为一个正数值。
{
printf("无法捕捉到SIGUSER2的信号!\n");
}
for(;;)
{
sleep(1);//休息一秒
printf("休息一秒\n");
}
printf("再见\n");
return 0;
}
程序正常运行时,一直处在for循环里,如果有信号来了,那么就跳去信号处理函数里去。可以通过kill给该进程发送信号,信号的话,其实就是一堆宏定义,这个可以go to看一下的。
程序执行流程: