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;
}
シェルが「In child process:」と出力しているときに、ctrl+c を押します。関数handler
は問題handler2
なく実行されますが、実行されることはありません。
私のコードのこのバグを手伝ってくれませんか?
更新: プロセスの実行中に子プロセスに SIGINT シグナルを受信させたいのですfoo
が、それは可能ですか?