Reputation: 595
As far as I understand signals sent to a parent process should not be sent to children. So why does SIGINT reach both the child and the parent in the example below?
#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);
}
Upvotes: 3
Views: 1273
Reputation: 212248
If you are sending SIGINT by typing ^-C, the signal is sent to all processes in the foreground processing group. If you use kill -2
, it will only go to the parent (or whichever process you indicate.)
Upvotes: 3