#include #include #include #include #include static void sig_hup(int singo) { printf("SIGHUP received, pid = %ld, signo = %d\n", (long) getpid(), singo); } static void pr_ids(char * name) { printf("%s: pid = %ld, ppid = %ld, pgrp = %ld, tpgrp = %ld\n", name, (long)getpid(), (long)getppid(), (long)getpgrp(), (long)tcgetpgrp(STDIN_FILENO)); fflush(stdout); } int main(void) { char c; pid_t pid; pr_ids("parent"); if((pid = fork()) < 0) { printf("fork error\n"); exit(-1); } else if (pid > 0) { printf("parent sleep...\n"); sleep(3); printf("parent exit.\n"); } else { pr_ids("child"); signal(SIGHUP, sig_hup); kill(getpid(), SIGTSTP); pr_ids("child2"); if(read(STDIN_FILENO, &c, 1) != 1){ printf("read error %d on controlling TTY\n", errno); exit(-1); } exit(0); } return 0; }