#include #include #include #include int main(int argc, char **argv) { printf("before fork my pid %d\n", getpid()); pid_t 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()); char *args[] = {"a0", "a1", "a2", "a3", NULL}; int rc = execvp("./printmyargs", args); printf("exec returned %d\n", rc); return 42; } else { int status; printf("parent: my pid %d, my child's pid is %d\n", getpid(), childpid); pid_t childexited = wait(&status); if (childexited == -1) { perror("wait"); return 0; } if (WIFEXITED(status)) { printf("parent: child exited pid %d exit status %d\n", childexited, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("parent: child crashed/killed pid %d, signal %d\n", childexited, WTERMSIG(status)); } else { printf("something else\n"); } } }