#include #include #include #include int main(int argc, char **argv) { printf("before fork my pid %d\n", getpid()); pid_t childpid; for (int i=0; i < 2; i++) { childpid = fork(); if (childpid == -1) perror("fork"), exit(0); } if (childpid == 0) { printf("child: my pid %d, my parent's pid is %d\n", getpid(), getppid()); //raise(SIGKILL); void *w = *(void **)NULL; exit(144); } else { for (int i=0; i < 2; i++) { int status = 0; pid_t childexited = wait(&status); if (childexited == -1) { perror("wait"); continue; } if (WIFEXITED(status)) { /* normal */ printf("parent: my pid %d, my child's pid is %d (exited child is %d) status %d\n", getpid(), childpid, childexited, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { /* crash or kill */ printf("parent: my pid %d, my child's pid is %d (exited child is %d) what signal %d\n", getpid(), childpid, childexited, WTERMSIG(status)); } else { printf("?"); } } } }