[英]Why can't the signal handler in the child process be triggered?
我的意图是为fgets创建1秒钟的时间。 如果在1秒钟内未收到任何输入,则程序终止。
我想到的设计是:父级为SIGALRM注册一个信号处理程序。 然后,它派生一个将触发SIGALRM的子级,然后继续调用fgets。 SIGALRM将触发处理程序,该处理程序将终止父进程。 但是,当我在64位ubuntu 14.04上执行此操作时,不会触发处理程序,并且程序仅等待用户永远输入fget。
为什么会发生这种情况,我该如何解决?
#include "csapp.h"
void handler() {
printf("lazy man\n");
kill(SIGKILL, getppid());
exit(0);
}
int main() {
char buf[100];
signal(SIGALRM, handler);
pid_t pid;
if ((pid = fork()) == 0) {
alarm(1);
} else {
fgets(buf, 100, stdin);
printf("%s", buf);
}
return 0;
}
〜
这种分叉和杀死似乎是错误的。 只需设置警报,为SIGALRM注册一个空信号处理程序,然后检查fgets()的返回值-如果失败,则检查errno == EINTR; 如果是,则被信号打断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.