/* Test what is the process group of a process in limbo (process group leader that has been awaited but still has a member)? */ #include "process.h" int main(void) { // Clean up children once pipe is closed. int pipes[2]; if ( pipe(pipes) < 0 ) err(1, "pipe"); pid_t zombie = fork(); if ( zombie < 0 ) err(1, "fork"); char c; if ( !zombie ) { close(pipes[1]); read(pipes[0], &c, 1); exit(0); } if ( setpgid(zombie, zombie) < 0 ) err(1, "setpgid on zombie"); pid_t member = fork(); if ( member < 0 ) err(1, "fork"); if ( !member ) { close(pipes[1]); read(pipes[0], &c, 1); exit(0); } if ( setpgid(member, zombie) < 0 ) err(1, "setpgid on member"); if ( kill(zombie, SIGKILL) < 0 ) err(1, "kill zombie"); int status; waitpid(zombie, &status, 0); pid_t pgid = getpgid(zombie); if ( pgid < 0 ) err(1, "getpgid on zombie"); if ( pgid != zombie ) err(1, "getpgid(zombie) != zombie"); close(pipes[1]); waitpid(member, &status, 0); return 0; }