Linux使用signal调用中断处理函数
Linux下调用自定义中断处理函数,但是发生中断时出现../sysdeps/unix/syscall-template.S: No such file or directory.错误
测试了一下,三个进程都会收到SIGINT信号。
原程序中,child1, child2都收到SIGINT信号,调用stop(), 之后被唤醒,打印"child process ... is killed by parent!",事实上kill这两个child的不是parent,是它们自己的SIGINT。
放到①处,child1收到SIGINT信号,默认的行为是把自己杀了,当然也来不及打印任何东西了。child2收到SIGINT信号,打断waiting(),打印"child process 2 ...",然后退出。杀死它的也不是SIGUSR2信号。
放到②处,child1, child2收到SIGINT信号,默认的行为是立即把自己杀了,也来不及打印任何东西了。
测试方法:
// 打印谁执行、被什么信号打断
static void stop(int signal) {
printf("stop %d by signal %d
", getpid(), signal);
wait_mark=0;
}
// 在parent进程中,打印各进程id
printf("parent %d, child1 %d, child2 %d
",getpid(),p1,p2);
如果让parent成为杀死child的凶手,可以在child1,child2中加入:
signal(SIGINT, keep_me_alive);
// 不理睬SIGINT信号
static void keep_me_alive(int signal) {
}
上一篇:c语言关于rand函数的应用