如果我知道某个进程的pid没有运行代码(比如firefox) 如何为它分配信号处理程序(比如SIGINT)?
我现在有:
pid = fork();
printf("forked and my pid is %d\n",pid);
//check for errors
if (pid<0){
printf("Error: invoking fork to start ss has failed, Exiting\n ");
exit(1);
}
//the child process runs the gulp
if (pid==0){
printf("STARTING THE FIREFOX\n");
//calling signal(somehandler,SIGINT); here will bind the child, which is replaced by the firefox new process,hence won't invoke the "somehandler"
if (execv(args[0],args)<0){
perror("Error: running s with execvp has failed, Exiting\n");
}
//invoking signal(somehandler,SIGINT); will obviously not do anything
printf("IVE BEEN KILLED\n");
}
//dad is here
printf("DAD IS GOING TO KILL\n");
if (pid>0){
sleep(6);
//how do I bind a handler to that signal????
kill(get_pidof(string("firefox")),SIGINT);
}
答案 0 :(得分:1)
您只能在过程中建立信号处理程序。换句话说,当获得SIGINT时,你不能让firefox调用你的信号处理程序。
正如您所注意到的那样,确实在执行过程之后不会保留信号处理程序 - 该过程的图像被替换,因此没有意义。所以,就像我之前说过的那样:即使你控制了它的父母,也不能让firefox
调用你的处理程序。
我需要我的程序来运行另一个程序(比如firefox),并且知道 当火狐死亡或坠毁时
在这种情况下,你想为SIGCHLD
建立一个信号处理程序:你的进程将在孩子死亡时跳转到它。
答案 1 :(得分:0)
当 Cnucitar 回答here时,您只能从流程内部更改信号处理程序。
如果你想在firefox中创建一个信号处理程序,你可以修补它,也许是通过一个插件。但我相信这是个坏主意。