作业需求:
任务:验证当在一个信号处理函数内部时,再次触发该信号,会再次执行该信号的处理函数吗?
例如:进程在执行2号信号处理函数时,再次触发2号信号,会再次执行2号信号的处理函数吗?
答: 不会
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
typedef void (*sighandler_t)(int);
void handler(int sig)
{
printf("运行handler\n");
while(1)
{
printf("this is handler\n");
sleep(1);
}
return;
}
void handler1(int sig)
{
printf("this is handler1\n");
return;
}
int main(int argc, const char *argv[])
{
sighandler_t s= signal(3,handler);
if(SIG_ERR==s)
{
perror("signal");
return -1;
}
sighandler_t s1= signal(20,handler1);
if(SIG_ERR==s1)
{
perror("signal");
return -1;
}
while(1)
{
sleep(1);
}
return 0;
}
实现结果:
ubuntu@ubuntu:08_day$ gcc signal.c
ubuntu@ubuntu:08_day$ ./a.out
^\运行handler
this is handler
this is handler
this is handler
^\this is handler
this is handler
^\this is handler
this is handler
^\this is handler
this is handler
this is handler
^C
ubuntu@ubuntu:08_day$