我在寫一個處理Linux信號的程序。更具體地說,我想在子進程中重新安裝signal SIGINT,但發現它不起作用。SIGINT信號在linux中重新安裝
這裏是我的代碼簡化版本:
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;
}
當外殼是印刷「在孩子的過程:」我按CTRL + C。我發現函數handler
執行沒有問題,但從未執行handler2
。
你能幫我解決這個錯誤嗎?
更新: 我希望子進程在foo
運行過程中接收到SIGINT信號,這可能嗎?
在您調用execve()之後,子進程不再有任何信號設置,它們都被重置爲SIG_DFL - default。你在問什麼? –
@jimmcnamara我不知道信號設置已被重置爲默認值。謝謝! –