C++中fork函数的使用及原理

 更新时间:2023年05月10日 08:46:08   作者:Luyoungs  
这篇文章主要介绍了C++中fork函数的使用及原理,在C++中,fork函数用于创建一个新的进程称为子进程,该进程与原始进程几乎完全相同,需要的朋友可以参考下

fork函数的基本概况

fork() 函数调用成功之后,会有两个返回值。当前进程,也就是父进程返回子进程的 pid,子进程返回 0。如果函数调用错误,返回为-1。

#include <stdio.h>
#include <unistd.h>
int main(void) {
    int i = 0;
    printf("i\tson/pa\tppid\tpid\tfpid\n");
    for (i = 0; i < 2; i++) {
        pid_t fpid = fork();
        if (fpid == 0)
            printf("%d\tchild\t%4d\t%4d\t%4d\n", i, getppid(), getpid(), fpid);
        else
            printf("%d\tparent\t%4d\t%4d\t%4d\n", i, getppid(), getpid(), fpid);
    }
    return 0;
}

运行结果:

i son/pa ppid pid fpid

i son/pa ppid pid fpid
0 parent 54861 57344 57345
0 child 57344 57345 0
1 parent 54861 57344 57346
1 parent 57344 57345 57347
1 child 57344 57346 0
1 child 57345 57347 0

这里做一下简单分析:

1、pid 为 57344 的进程 fork()之后,返回了 57345,这是一个子进程的 pid。

2、子进程的返回值为0,显然它的父进程 pid 为 57344。

3、for 循环继续执行;

4、此时 pid 为 56344 的进程又创建了一个子进程,子进程 pid 为 56346。

5、上一个 pid 为 56345 的子进程此时充当的是父进程,它创建了一个子进程,pid 为 56347。

6、然后,56346、56347 的进程继续执行,程序结束。

fork函数做的工作

#include<unistd.h>
pid_t fork(void)

返回值:pid_t 是进程描述符,实质就是一个int,如果fork函数调用失败,返回一个负数,调用成功则返回两个值:0和子进程ID。

函数功能:以当前进程作为父进程创建出一个新的子进程,并且将父进程的所有资源拷贝给子进程,这样子进程作为父进程的一个副本存在。父子进程几乎时完全相同的,但也有不同的如父子进程ID不同。

fork函数之后

如果程序只是简单的新建一个几乎一摸一样的进程,那么这样的进程是没什么作用的。因此,如果能把新的子进程用其它程序替换掉,我们就成功地利用一个进程,创建了一个完全不同的子进程。关于进程替换,这里不再赘述,后续会再次提及。

到此这篇关于C++中fork()函数的使用及原理的文章就介绍到这了,更多相关C++ fork()函数 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 一文详解Qt的QObject类

    一文详解Qt的QObject类

    Qt的QObject类是Qt框架中的基类,它是所有Qt对象的父类,本文主要介绍了Qt的QObject类,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 快速掌握VC6.0中各种宏注释应用(附图)

    快速掌握VC6.0中各种宏注释应用(附图)

    为了方便别人或自己阅读自己的程序,注释是坚决不可少的,一个漂亮的程序,不是在于你应用的技术多么高深,而是能够把高深的技术描述的清楚易懂
    2013-01-01
  • C++ 入门指南:零基础入门教学

    C++ 入门指南:零基础入门教学

    学习C++就像学习一门新的语言,需要从字母开始,逐步构建句子和段落,本文就是你的C++“字母表”,本文介绍了C++编程语言的基本概念和学习路线图,从语言基础到核心特性,再到实际项目练习,帮助读者逐步掌握C++编程
    2026-02-02
  • C语言实现通讯录的详细代码

    C语言实现通讯录的详细代码

    本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 一篇文章带你了解C++语法基础--字符串

    一篇文章带你了解C++语法基础--字符串

    这篇文章主要介绍了C++常用字符串分割方法实例汇总,包括了strtok函数、STL、Boost等常用的各类字符串分割方法,非常具有实用价值,需要的朋友可以参考下
    2021-08-08
  • C语言的循环小练习详解

    C语言的循环小练习详解

    这篇文章主要为大家介绍了C语言的循环小练习,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Matlab实现好看的配对箱线图的绘制

    Matlab实现好看的配对箱线图的绘制

    配对箱线图,常见于配对样本的数据分析中,它除了能够表现两组的整体差异,还能够清晰地呈现单个样本的前后改变。本文将用Matlab实现配对箱线图的绘制,需要的可以参考一下
    2022-08-08
  • QT实现C++数据类与json转换

    QT实现C++数据类与json转换

    这篇文章主要为大家详细介绍了如何使用QT实现C++数据类与json转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • visual studio 2019编译c++17的方法

    visual studio 2019编译c++17的方法

    这篇文章主要介绍了visual studio 2019编译c++17的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • c语言的程序环境与预处理详解

    c语言的程序环境与预处理详解

    大家好,本篇文章主要讲的是c语言的程序环境与预处理详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论