#include // perror #include // pid_t #include // fork #include // wait int main(int argc, char const *argv[]) { int pid = fork(); if (pid < 0) { perror("fork"); return -1; } if (pid == 0) { // write(1, "123", 4); int n = 10 / 0; sleep(3); printf("%d 子进程结束", getpid()); return 10; } else { // status 用来保存子进程的退出状态 int status; int pid = wait(&status); // 等待子进程结束 printf("\n%d 父进程中, 等到了子进程 %d 结束, status = %d \n", getpid(), pid, status >> 8); // WIFEXITED(status) 为真表示子进程正常退出 if (WIFEXITED(status) & 0xff00 >> 8) // 子进程是否正常退出 { // WEXITSTATUS(status) 获取子进程的退出码 printf("%d", WEXITSTATUS(status)); } else { printf("子进程异常退出, status = %d", status >> 8); } } return 0; }