3
据我了解,发送给父进程的信号不应发送给子进程。那么,为什么SIGINT在下面的例子中同时涉及到了孩子和父母?发送给子进程和父进程的信号
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
void sigCatcher(int);
int main (void) {
if (signal(SIGINT, sigCatcher) == SIG_ERR) {
fprintf(stderr, "Couldn't register signal handler\n");
exit(1);
}
if(fork() == 0) {
char *argv[] = {"find","/",".",NULL};
execvp("find",argv);
}
for (;;) {
sleep(10);
write(STDOUT_FILENO, "W\n",3);
}
return 0;
}
void sigCatcher(int theSignal) {
write(STDOUT_FILENO, "C\n",3);
}
当您执行fork时,您将执行命令的进程的确切副本,并且由于signal方法在fork之前执行,孩子和父母都会接收到信号。 –
但exec取代所有的代码,所以信号处理程序被覆盖。 – Ahtenus