当一个信号处理函数时,再次出发信号,会再次执行该信号的处理函数吗?
验证代码如下:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
typedef void (*sighandler_t)(int);
void handler(int sig)
{
while(1)
{
printf("handler:sig = %d\n", sig);
sleep(2);
}
return ;
}
void handler1(int sig)
{
printf("handler1:sig = %d\n", sig);
return ;
}
int main(int argc, const char *argv[])
{
sighandler_t s;
//捕获3号信号
s = signal(3,handler);
if(SIG_ERR == s)
{
perror("signal");
return -1;
}
printf("s = %p\n", s);
//捕获20号信号
s = signal(20,handler1);
if(SIG_ERR == s)
{
perror("signal");
return -1;
}
printf("s = %p\n", s);
while(1)
{
printf("this is main function\n");
sleep(2);
}
return 0;
}
运行结果如下:
所以 当一个信号处理函数时,再次出发信号,不会再次执行该信号的处理函数