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;
}

运行结果

相关推荐
code bean30 分钟前
【C++】Scoop 包管理器与 MinGW 工具链详解
开发语言·c++
hetao17338371 小时前
2025-12-11 hetao1733837的刷题笔记
c++·笔记·算法
saltymilk2 小时前
C++ 语言特性的变更可能让你的防御成为马奇诺防线
c++
Smile丶凉轩2 小时前
C++ 高性能内存池面试题总结
开发语言·c++
汉克老师3 小时前
CCF-NOI2025第二试题目与解析(第二题、集合(set))
c++·算法·noi·子集卷积·sos dp·mod 异常
Ayu阿予4 小时前
C++从源文件到可执行文件的过程
开发语言·c++
福尔摩斯张4 小时前
基于C++的UDP网络通信系统设计与实现
linux·c语言·开发语言·网络·c++·tcp/ip·udp
hkNaruto4 小时前
【规范】Linux平台C/C++程序版本发布调试规范手册 兼容银河麒麟
linux·c语言·c++
老王熬夜敲代码5 小时前
C++中的mutex、condition_val
c++·笔记·面试
闻缺陷则喜何志丹5 小时前
【计算几何 二分查找】P12261 [蓝桥杯 2024 国 Java B] 激光炮|普及+
c++·数学·蓝桥杯·计算几何·洛谷