previous | start | next

Example

    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   }


previous | start | next