孤问尘
孤问尘
Published on 2025-01-13 / 0 Visits
0
0

父子进程

编写一段程序,使用系统调用fork()来创建一个子进程。 子进程通过系统调用exec()更换自己的执行代码,新的代码显示“new program.”后, 调用exit()函数结束。父进程则调用waitpid()等待子进程结束,并在子进程结束后, 显示子进程的标识符然后正常结束。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
    pid_t pid;

    // 创建子进程
    pid = fork();

    if (pid == 0) {
        // 子进程
        printf("Child process: PID = %d\n", getpid());

        // 使用exec()替换子进程的执行代码
        execl("/bin/echo", "echo", "new program.", NULL);
        
        // 如果exec()执行失败,则打印错误信息
        perror("exec");
        exit(EXIT_FAILURE);
    } else if (pid > 0) {
        // 父进程
        int status;
        
        // 等待子进程结束
        waitpid(pid, &status, 0);

        if (WIFEXITED(status)) {
            printf("Child process %d exited normally.\n", pid);
        } else {
            printf("Child process %d exited abnormally.\n", pid);
        }
    } else {
        // fork失败
        perror("fork");
        exit(EXIT_FAILURE);
    }

    return 0;
}


Comment