【发布时间】:2017-06-04 03:11:17
【问题描述】:
我的目的是为 fgets 创建一个 1 秒的时间。如果在 1 秒内没有收到任何输入,则程序终止。
我想出的设计是: 父级为 SIGALRM 注册一个信号处理程序。然后它派生一个将触发 SIGALRM 的子进程并继续调用 fgets。 SIGALRM 将触发终止父进程的处理程序。但是当我在 ubuntu 14.04 64 位上执行此操作时,不会触发处理程序,程序只会等待用户永远输入 fgets。
为什么会发生这种情况,我该如何解决?
#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;
}
~
【问题讨论】:
标签: c linux ubuntu process signals