面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 子进程
printf("子进程: 我是子进程,PID为 %d\n", getpid());
exit(42); // 子进程以状态42退出
} else {
// 父进程
printf("父进程: 我是父进程,PID为 %d,等待子进程结束...\n", getpid());
pid_t waited_pid = wait(&status);
if (waited_pid == -1) {
perror("wait");
exit(EXIT_FAILURE);
}
printf("父进程: 子进程(PID %d)已结束,退出状态为 %d\n", waited_pid, WEXITSTATUS(status));
}
return 0;
}
wait函数参数含义
wait
函数的参数是一个指向int
类型的指针status
,用于获取子进程的退出状态。这个状态包含了子进程是正常退出还是异常终止等信息。
wait函数返回值意义
- 成功返回:返回终止子进程的PID。
- 失败返回:返回 -1,并设置
errno
来指示错误原因,比如没有子进程时会返回 -1 并设置errno
为ECHILD
。通过WEXITSTATUS(status)
宏可以从status
参数中提取出子进程正常退出时传递给exit
函数的值(范围是0 - 255)。