1、作业要求
验证当在一个信号处理函数内部时,再次触发该信号,会再次执行该信号的处理函数吗?
例如:进程在执行2号信号处理函数时,再次触发2号信号,会再次执行2号信号的处理函数吗?
2、实现过程
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
typedef void(*sighandler_t)(int);
void handler(int sig){
printf("这是第20号信号!\n");
for(int i=0;i<5;i++){
printf("信号:sig = %d\n",sig);
sleep(1);
}
return;
}
int main(int argc, const char *argv[])
{
//捕获信号(20)
sighandler_t si = signal(20,handler);
if(SIG_ERR == si){
perror("signal");
return -1;
}
for(int i=0;i<100;i++){
printf("这是主函数!\n");
sleep(1);
}
return 0;
}
3、实现效果
4、答案:不会。当处理函数正在运行时再次触发信号,要等待处理函数运行完毕后,会重新执行处理函数。