MST

星途 面试题库

面试题:C语言在Linux下如何批量等待子进程并获取其退出状态

在Linux环境中,使用C语言编写一个程序,创建多个子进程,父进程需要批量等待这些子进程结束,并获取每个子进程的退出状态,简要描述实现思路并给出关键代码片段。
35.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用fork()函数创建多个子进程。
  2. 子进程执行特定任务后通过exit()退出,并带上退出状态。
  3. 父进程使用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;
}