fork() 详解,返回2次什么意思?

在 Unix-like 系统中,fork() 函数是用于创建新进程的系统调用。当调用 fork() 时,会创建一个新的子进程,该子进程是原始进程的副本。fork() 函数在父进程和子进程中返回不同的值,具体如下:

对于父进程:fork() 返回新创建子进程的进程 ID(PID)。这个 PID 是一个正整数。

对于子进程:fork() 返回值为 0。这是子进程的标识。

所以,在调用 fork() 后,父进程和子进程同时从 fork() 返回,但返回的值不同。父进程会接收到新创建子进程的 PID,而子进程则会返回 0。

这种返回值的机制可以用来区分父进程和子进程的执行路径。通常,父进程会使用新创建的子进程的 PID 来跟踪子进程的状态,并做出相应的处理。而子进程可以根据返回值来确定自己是子进程,然后执行相应的任务。

下面是一个简单的示例代码,用于展示 fork() 的使用:

cpp 复制代码
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    pid_t pid;

    pid = fork();

    if (pid < 0) {
        // fork() 失败的处理逻辑
        perror("fork error");
    } else if (pid == 0) {
        // 子进程逻辑
        printf("This is the child process (PID: %d)\n", getpid());
    } else {
        // 父进程逻辑
        printf("This is the parent process (PID: %d)\n", getpid());
        printf("Child process PID: %d\n", pid);
    }

    int nStat = 0;
    printf("wait PID: %d\n", pid);
    int nWaitId = waitpid(pid, &nStat, 0);
    printf("wait PID: %d nstat: %d\n", pid, nStat);

    return 0;
}

运行结果

相关推荐
small_wh1te_coder7 分钟前
c语言超详细知识点总结 1500行手写源码 持续更新中ing 从25年5月到6月5日
c++·c
SteveDraw2 小时前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
十五年专注C++开发2 小时前
设计模式之单例模式(二): 心得体会
开发语言·c++·单例模式·设计模式
?!7142 小时前
算法打卡第18天
c++·算法
zh_xuan2 小时前
c++ std::pair
开发语言·c++
CodeWithMe3 小时前
【C/C++】EBO空基类优化介绍
开发语言·c++
k要开心3 小时前
从C到C++语法过度1
开发语言·c++
whoarethenext3 小时前
使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
c语言·c++·opencv
能工智人小辰4 小时前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法
梦星辰.4 小时前
VSCode CUDA C++进行Linux远程开发
linux·c++·vscode