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 }