【发布时间】:2011-06-17 05:58:03
【问题描述】:
“代码清单 1”和“代码清单 2”有什么区别吗?因为在代码清单 1 中,子进程能够捕捉到 SIGTERM 信号并很好地退出。但是代码列表 2 在 SIGTERM 信号上突然终止。
我正在使用 Linux 和 C。
代码清单 1
if (signal(SIGTERM, stopChild) == SIG_ERR) {
printf("Could not attach signal handler\n");
return EXIT_FAILURE;
}
pid = fork();
代码清单 2
pid = fork();
if (signal(SIGTERM, stopChild) == SIG_ERR) {
printf("Could not attach signal handler\n");
return EXIT_FAILURE;
}
奇怪的是,在代码清单 2 中,子进程和父进程都为 SIGTERM 设置了信号处理程序。所以,这应该有效。不是吗?
【问题讨论】:
-
我刚刚测试过,对我来说很好用。在这两种情况下,两个进程都通过 stopChild() 调用优雅地退出。
-
你是否有机会从线程中调用 fork()?
-
你能提供一个完整的示例程序来展示这种行为吗?
-
谁发送 SIGTERM?这不是父母,是吗? 咳嗽比赛咳嗽(如果答案是肯定的)
-
今天无法用相同的代码重现它!不知道发生了什么。
标签: c linux fork signals signal-handling