实现思路
- 使用
fork()
函数创建多个子进程。
- 子进程执行特定任务后通过
exit()
退出,并带上退出状态。
- 父进程使用
waitpid()
或wait()
函数等待子进程结束,并获取其退出状态。这里由于要批量等待多个子进程,可使用waitpid()
并结合循环实现。
关键代码片段
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define CHILD_PROCESS_NUM 3
int main() {
pid_t pids[CHILD_PROCESS_NUM];
int status;
// 创建多个子进程
for (int i = 0; i < CHILD_PROCESS_NUM; i++) {
pid_t pid = fork();
if (pid == -1) {
perror("fork");
return 1;
} else if (pid == 0) {
// 子进程
printf("Child process %d is running.\n", getpid());
// 子进程执行任务
// 这里简单以退出状态i为例
exit(i);
} else {
pids[i] = pid;
}
}
// 父进程等待所有子进程结束
for (int i = 0; i < CHILD_PROCESS_NUM; i++) {
pid_t finished_pid = waitpid(pids[i], &status, 0);
if (finished_pid == -1) {
perror("waitpid");
return 1;
}
if (WIFEXITED(status)) {
printf("Child process %d exited with status %d.\n", finished_pid, WEXITSTATUS(status));
}
}
return 0;
}