#include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { pid_t child; printf("pgid = %d\n", getpgrp()); child = fork(); if (child == 0) { struct termios termios_p; printf("forked, pgid = %d\n", getpgrp()); if (setpgrp() == -1) { printf("error: setpgid: %s\n", strerror(errno)); exit(EXIT_FAILURE); } printf("new pgid = %d\n", getpgrp()); if (tcgetattr(STDIN_FILENO, &termios_p) == -1) { printf("error: tcgetattr: %s\n", strerror(errno)); exit(EXIT_FAILURE); } if (tcsetattr(STDIN_FILENO, 0, &termios_p) == -1) { printf("error: tcsetattr: %s\n", strerror(errno)); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } printf("forked, child = %d\n", child); while (1) { pid_t pid; int status; pid = wait(&status); if (pid == -1) { printf("error: wait: %s\n", strerror(errno)); exit(EXIT_FAILURE); } printf("pid %d status %d\n", pid, status); } return EXIT_SUCCESS; }