#include #include #include #include #include int main(int argc, char **argv) { printf("[parent] about to fork..\n"); pid_t cpid = fork(); if (cpid == 0) { // child // (parent pid available via getppid()) printf("[child] I'm alive!\n"); printf("[child] Sleeping 8 seconds...\n"); sleep(8); printf("[child] exiting...becoming a zombie.\n"); return 10; } else if (cpid < 0) { // parent -- fork failed perror("[parent] fork failed"); return EXIT_FAILURE; } // parent -- fork succeeded printf("[parent] My child lives!\n"); // sleep so child becomes a zombie sleep(10); printf("[parent] Waiting for my child to die...\n"); int stat_loc; waitpid(cpid, &stat_loc, 0); printf("[parent] My child has died.\n"); printf("[parent] Status code from child is %d\n", WEXITSTATUS(stat_loc)); return EXIT_SUCCESS; }