int main(int argc, char *argv[]) { pid_t child1, child2; if (argc < 3) { printf("Usage: waitpid [0 1] [0 1]\n"); exit(1); } child1 = fork(); if (child1 < 0) { die("child1 fork"); } else if (child1 == 0) { child2 = fork(); if (child2 < 0) { die("child2 fork"); } else if (child2 == 0) { child2_do(); } else { child1_do(child2, argv[1]); } } else { father_do(child1, argv[2]); } return 0; }
int main(int argc,char *argv[]) { int pid1, pid2; // fd[0] for read, fd[1] for write int fd[2]; pipe(fd); // 1-->2 switch(pid1 = fork()) { case -1: { printf("fork error\n"); exit(1); } case 0: { close(fd[1]); child_1_do(fd[0]); } default: { printf("1 --> 2, 1 id=%d, 2 id=%d\n", getpid(), pid1); // 1 --> 3 switch (pid2 = fork()) { case -1: { printf("fork error\n"); exit(1); } case 0: { close(fd[1]); child_2_do(fd[0]); } default: printf("1 --> 3, 1 id=%d, 3 id=%d\n", getpid(), pid2); break; } break; } } close(fd[0]); father_do(pid1, pid2, fd[1]); return 0; }