【发布时间】:2016-03-22 13:28:12
【问题描述】:
如果父进程收到 ctrl-C 信号,我一直试图阻止我的父线程杀死子进程。我已经没有想法了。
父进程已经捕获 SIGINT,所以我想要和现在孩子死的一样。
int main() {
pid_t pid;
pid = fork();
if(pid > 0) {
/*Parent proccess*/
[...other code...]
} else {
/*Child proccess*/
signal(SIGINT, SIG_IGN); //does not work
sigaction(SIGINT, &action, 0); //does not work either
[...other code...]
}
}
想法?
【问题讨论】:
-
子进程杀死它的信号是什么?
-
Linux daemonize的可能重复
-
通常不会,但是 ctrl+c 将 sigint 发送到整个前台进程组,而不仅仅是父进程。 OP 可以尝试使用 setsid() 而不是尝试捕获信号。
-
你会在 fork() 之后偶然执行 exec*() 吗?这会将所有信号处理程序重置为默认值
-
文件句柄、环境变量和进程组是内核属性。信号处理程序是用户空间属性。没有任何用户空间能够在 exec 中幸存。
标签: c multithreading