返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中fork函数的使用及原理
  • 500
分享到

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

C++fork函数C++fork 2023-05-19 14:05:51 500人浏览 独家记忆
摘要

目录fork函数的基本概况fork函数做的工作fork函数之后fork函数的基本概况 fork() 函数调用成功之后,会有两个返回值。当前进程,也就是父进程返回子进程的 pid,子进

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()函数 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中fork函数的使用及原理

本文链接: https://lsjlt.com/news/213392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中fork函数的使用及原理
    目录fork函数的基本概况fork函数做的工作fork函数之后fork函数的基本概况 fork() 函数调用成功之后,会有两个返回值。当前进程,也就是父进程返回子进程的 pid,子进...
    99+
    2023-05-19
    C++ fork函数 C++ fork
  • UNIX中fork()函数怎么使用
    在UNIX中,fork()函数用于创建一个新的进程。该函数会创建一个当前进程的副本,其中包括进程的代码、数据和堆栈等信息。新创建的进...
    99+
    2023-09-11
    UNIX
  • 怎么在Linux中使用fork()函数
    怎么在Linux中使用fork()函数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、fork()函数在操作系统的基本概念中进程是程序的一次执行,且是拥有资源的最...
    99+
    2023-06-13
  • Python返回函数的原理及使用
    这篇文章主要介绍“Python返回函数的原理及使用”,在日常操作中,相信很多人在Python返回函数的原理及使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python返回函数的原理及使用”的疑惑有所帮助!...
    99+
    2023-06-15
  • java中fork-join的原理解析
    ForkJoinTask就是ForkJoinPool里面的每一个任务。他主要有两个子类:RecursiveAction和RecursiveTask。然后通过fork()方法去分配任务...
    99+
    2024-04-02
  • Linux的fork函数使用实例分析
    本文小编为大家详细介绍“Linux的fork函数使用实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux的fork函数使用实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一个进程,包括代码、数...
    99+
    2023-06-27
  • 解析Python中回调函数的原理及使用方式
    Python回调函数的原理和用法解析 回调函数是一种常见的编程技术,尤其在Python中被广泛使用。它可以使我们在异步编程中更加灵活地处理事件和执行任务。本文将对回调函数的原理和用法进行详细解析,并提供具体的代码示例。 一、回调...
    99+
    2024-02-02
    原理解析 用法分析
  • Mysql中报错函数floor()函数和rand()函数的配合使用及原理详解
    目录1. floor 函数1.1 floor 函数的作用2. rand() 函数2.1 rand() 函数的作用3. floor() 函数 配合 rand() 函数3.1 两个组合函数的使用4. 以 floor() 函数...
    99+
    2022-07-29
    mysql floor()函数 mysql报错函数floor() mysql报错函数rand()
  • C++虚函数表的原理与使用解析
    目录前言1.虚函数表2.一般继承(无虚函数覆盖)3.一般继承(有虚函数覆盖)4.多重继承(无虚函数覆盖)5.多重继承(有虚函数覆盖)6.安全性6.1 通过父类型的指针访问子类自己的虚...
    99+
    2024-04-02
  • UNIX中fork()函数的作用是什么
    UNIX中的fork()函数用于创建一个新的进程。在调用fork()函数之后,操作系统会创建一个与原进程完全相同的新进程,包括代码、...
    99+
    2023-09-11
    UNIX
  • 怎么在python中调用fork()函数
    怎么在python中调用fork()函数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、...
    99+
    2023-06-14
  • MySQL聚合函数的原理及作用
    下文我给大家简单讲讲关于MySQL聚合函数的原理及作用,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完MySQL聚合函数的原理及作用对大家多少有点帮助吧。 以下是我们...
    99+
    2024-04-02
  • Python递归函数的原理及应用
    本篇内容主要讲解“Python递归函数的原理及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python递归函数的原理及应用”吧!一、什么是递归函数在函数内部,可以调用其他函数。如果一个函数...
    99+
    2023-06-15
  • Python max函数中key的用法及原理解析
    目录一、背景二、原理三、用法四、实例一、背景 起源于一个问题:怎样找到字符串中出现次数最多的字符 其实使用max函数就能很轻松的解决这个问题: 代码: str1 = "AAAaaa8888899sssss" pr...
    99+
    2022-06-02
    Python max函数key用法 Python max函数
  • C++ 函数模板中函数重载的实现原理?
    在 c++++ 函数模板中,函数重载可以通过编译器生成不同的符号名称和代码生成来实现。编译器根据传入的参数类型进行匹配,选择最匹配的重载。例如,模板中定义了 print(t) 和 pri...
    99+
    2024-04-15
    函数重载 函数模板 c++
  • linux中fork的实现原理是什么
    在Linux中,fork是创建新进程的系统调用之一。当调用fork系统调用时,操作系统会复制当前进程的所有资源(包括代码、数据、堆栈...
    99+
    2023-09-11
    linux
  • PHP PCNTL扩展fork函数失败的原因分析
    PHP PCNTL扩展fork函数失败的原因分析 在PHP中,PCNTL扩展提供了一系列用于处理进程控制的函数,其中fork函数是其中一个常用的函数之一。通过fork函数,我们可以创建...
    99+
    2024-02-28
    php fork pcntl
  • C++中的多态问题—理解虚函数表及多态实现原理
    目录一、多态的概念概念构成条件二、虚函数的重写重写的定义重写的特殊情况override和final关键字区分重写、重载、重定义抽象类的概念三、多态的实现原理父类对象模型补充:生成默认...
    99+
    2023-02-05
    C++中的多态 C++虚函数表 C++多态实现原理
  • Linux系统中fork函数的具体使用方法是什么
    本篇文章为大家展示了Linux系统中fork函数的具体使用方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、fork 入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通...
    99+
    2023-06-28
  • C++中memcpy函数的使用以及模拟实现
    目录前言一、什么是memcpy二、memcpy与strcpy的区别1.strcpy2.memcpy三、模拟实现memcpy总结前言 memcpy函数如何使用,以及如何实现我们自己的m...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作