内容: 记录signal注册信号处理函数的时候,在不同的环境下会有不同的行为
signal不同行为:
1.signal在unix和linux的c99环境下注册信号处理函数时,默认只处理一次,然后就恢复默认的处理方式
2.在linux非c99环境下注册信号处理函数时,触发一次后不会恢复默认的处理方式
测试:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
void sigint_handler(int signo)
{
printf("sigint_handler, signo: %d\n", signo);
}
int main(int argc, char *argv[])
{
signal(SIGINT, sigint_handler);
while (1) {
sleep(1);
printf("I am awake \n");
}
return 0;
}
结果:可以多次触发
加入c99编译并运行:
第二次收到ctrl+c时变为默认处理,进程结束。
大四学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈