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

运行结果

相关推荐
Brilliantwxx3 小时前
【Linux】 进程(5) 僵尸进程与内存泄漏扩展
linux·运维·服务器·网络·c++
程与留3 小时前
08_对话框系统全解析——模态非模态、QMessageBox、QFileDialog
c++·qt
程序员的园3 小时前
赋值运算符为什么要避免自赋值?
c++
Escalating_xu3 小时前
【C++ vector 深度解析】从常用接口、扩容机制与迭代器失效到核心模拟实现
java·c++·面试
牛艺翔3 小时前
C++ 基础知识
开发语言·c++
兔兔兔兔14 小时前
记录C++ 11
开发语言·c++
码匠许师傅4 小时前
【C++ 面试真题】32. 聊聊 C++ 的原子变量与无锁编程
java·c++·面试
wabs6664 小时前
关于栈【力扣150.逆波兰表达式求值的思考】
数据结构·c++·算法·leetcode··代码随想录
欧特克_Glodon4 小时前
OpenCV计算机视觉开发入门与实践<十七>:点运算与灰度变换概述
c++·人工智能·opencv·计算机视觉
牛油果子哥q5 小时前
C++序列式容器深度精讲:vector/list/deque底层实现、扩容原理、迭代器失效、性能对比、工程选型避坑
开发语言·c++·list