A parent registers a signal handler for SIGINT, the forks a child; waits for the child, then reads an integer.
The child registers a different signal handler for SIGINT and reads an integer.
What happens if a SIGINT is generated while the child is waiting to read its integer? Is the SIGINT delivered to both parent and child?
1
2 int main()
3 {
4 pid_t session, shell_pid, pgrpid, mypid;
5 int n;
6
7 signal(SIGINT, handlerP);
8 shell_pid = getppid();
9 mypid = fork();
10 if ( mypid == 0 ) {
11
12 signal(SIGINT, handlerC);
13 session = getsid(0);
14 mypid = getpid();
15 pgrpid = getpgid(0);
16 printf("Child: session = %u, shell = %u, pgrpid = %u, mypid =
17 %u\n",
18 session, shell_pid, pgrpid, mypid);
19 scanf("%d", &n);
20 printf("Child got %d\n", n);
21 exit(0);
22 }
23 waitpid(-1, 0, 0);
24 scanf("%d", &n);
25 printf("Parent got %d\n", n);
26
27 session = getsid(0);
28 mypid = getpid();
29 pgrpid = getpgid(0);
30 printf("Parent: session = %u, shell = %u, pgrpid = %u, mypid = %u\n",
31 session, shell_pid, pgrpid, mypid);
32 return 0;
33 }