我正在编写一个处理 Linux 信号的程序。更具体地说,我想在子进程中重新安装信号 SIGINT,却发现它不起作用。
这是我的代码的更简单版本:
void handler(int sig){
//do something
exit(0);
}
void handler2(int sig){
//do something
exit(0);
}
int main(){
signal(SIGINT, handler);
if ((pid = fork()) == 0) {
signal(SIGINT, handler2); // re-install signal SIGINT
// do something that takes some time
printf("In child process:\n");
execve("foo", argv, environ); // foo is a executable in local dir
exit(0);
}else{
int status;
waitpid(pid, &status, 0); // block itself waiting for child procee to exit
}
return 0;
}
当 shell 打印“在子进程中:”时,我按 ctrl+c。我发现该函数handler
执行没有问题,但handler2
从未执行。
你能帮我解决我代码中的这个错误吗?
更新:我希望子进程在foo
运行过程中接收 SIGINT 信号,这可能吗?