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 Signal(SIGINT, handlerC);
12 Signal(SIGTTOU, SIG_IGN);
13 printf("Child before setpgid\n");
14 // tcsetpgrp(0, getpid());
15 setpgid(0, getpid());
16 tcsetpgrp(0, getpid());
17 printf("Child's pid = %u\n", getpid());
18 printf("foreground gid = %u\n", tcgetpgrp(0));
19 printf("Child before tcsetpgrp\n");
20
21 session = getsid(0);
22 mypid = getpid();
23 pgrpid = getpgid(0);
24 printf("Child: session = %u, shell = %u, pgrpid = %u, mypid =
25 %u\n",
26 session, shell_pid, pgrpid, mypid);
27 scanf("%d", &n);
28 printf("Child got %d\n", n);
29 // tcsetpgrp(0, getppid());
30 exit(0);
31 }
32 waitpid(-1, 0, 0);
33 scanf("%d", &n);
34 printf("Parent got %d\n", n);
35
36 session = getsid(0);
37 mypid = getpid();
38 pgrpid = getpgid(0);
39 printf("Parent: session = %u, shell = %u, pgrpid = %u, mypid =
40 %u\n",
41 session, shell_pid, pgrpid, mypid);
42
43
44 return 0;
45 }