linux 中 fork()函数详解

【C++】开源:ncurses终端TUI文本界面库 ncurses配置使用(TUI) 阅读详情

 一、fork入门知识

     一个进程,就是程序的执行过程,包括代码、数据和分配给进程的资源。在linux 中 fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是克隆了一个自己。

一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都 复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

 

二、fork函数

fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回0;
    3)如果出现错误,fork返回一个负值;

    在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

    引用一位网友的话来解释fpid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0。

 

三、具体示例

这是一段 C代码程序:

#include <unistd.h> 
#include <stdio.h>  
int main ()  
{  
    int  fpid; //fpid表示fork函数返回的值 
    int count=0; 
    fpid=fork();  
    if (fpid < 0)  
        printf("error in fork!\n");  
    else if (fpid == 0) { 
        printf("i am the child process, my process id is %d\n",getpid());  
        printf("我是爹的儿子\n");//对某些人来说中文看着更直白。 
        count++; 
    } 
    else { 
        printf("i am the parent process, my process id is %d\n",getpid());  
        printf("我是孩子他爹\n"); 
        count++; 
    } 
    printf("统计结果是: %d\n",count); 
    return 0; 
}  

执行结果:

i am the parent process, my process id is 2947
我是孩子他爹
统计结果是: 1
i am the child process, my process id is 2948
我是爹的儿子
统计结果是: 1 

 

四、代码思路:

首先是,父进程 2947 指行到  fork() 函数,创建了一个可以并发执行的子进程,返回值为子进程的id号,所以就进入else语句,count ++ 之后 输出 为 1。

然后是 父进程执行完成之后,子进程开始执行(将父进程的代码完全copy了一份), id 号 为 2948,所以 int count =0 再次执行了一遍,fork()的返回值为0,进入了 else if (fpid == 0) 的语句,count++ 之后,输出 1。

最后进程执行结束,父子进程都执行结束。

 

 

【人工智能】提示词避坑指南:为什么大模型越让它“禁止”,它越要“唱反调”? 和 AI 沟通就像和聪明但直脑筋的工科生说话—— 阅读详情

相关推荐

软件破解逆向安全(一)初识内存地址和偏移

工具:CE 内存:数字->存访在电脑中->内存 实例:如何修改植物大战僵尸阳光 内存搜索最核心:过滤数据 先用CE加载植物大战僵尸,如下图 我们可以看到目前我们的阳光数是50,我们尝试在ce里搜索精确数值,4 byte是int整数的表示。 我们发现有很多数据,尝试收集一个阳光变成75再次搜索: 我们发现就一个了,这时我们可以双击Value随便修改阳光的数值了。 这里我们说一下动态和静态地址 动态地址:临时用于存放数据的地址,黑色。特征:重新启动游戏地..

weixin_43781139的博客 2597

【Linux】fork()函数详解 (深入浅出 实例讲解)

文章目录@[toc]一、fork入门知识二、fork进阶知识三、fork高阶知识参考资料 一、fork入门知识          一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。        &nbsp

Sunnyside_ 1万+

20个闭环渗透测试项目:从漏洞发现到简历突围

渗透测试不仅是工具使用,更是对系统设计缺陷与实现偏差的深度推演。理解OWASP Top 10、Burp Suite等基础能力只是起点,真正具备工程价值的是能复现、可验证、可协作的完整攻击链。本文聚焦真实业务场景下的SSRF协议绕过、JWT签名机制缺陷、Redis未授权利用、Kong网关配置风险及etcd存储结构分析等核心热词,揭示漏洞本质在于架构决策与配置偏差的叠加态。适用于红队实战、甲方安全建设与乙方渗透审计等多类岗位,帮助从业者将技术动作升维为技术叙事。

weixin_32234493的博客 415

Linux fork函数

1、fork函数用于创建子进程,其特殊性在于调用一次fork函数,会得到两次返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误,fork返回一个负值; 简单示例: #include "stdio.h" #include "stdlib.h" #include "unistd.h" #include <iostream> using namespace std; int main(int argc, ...

小米的修行之路 5155

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

struggle2025的博客 1751

SAP PP后台配置实战:从BOM到工艺路线的全流程解析

本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。

weixin_29300931的博客 1010

【linux】linux中fork()详解(实例讲解)|fork的运行机制

原文:https://blog.youkuaiyun.com/jason314/article/details/5640969#1536434-hi-1-50500-42d97150898b1af15ddaae52f91f09c2 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的...

我的笔记本 1万+

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1712

fork函数详解【Linux】

fork函数的概念 深拷贝的策略 fork调用后的底层细节解释 fork学习中的一些笔记所以真实情况是:子进程的创建确实以父进程为模板将其内容拷贝到了子进程的内核数据结构中,但是当数据有所变化时,就以深拷贝的方式父子进程各自私有一份。看完上面这份代码,为什么明明父子进程的a是同一块地址空间的,按理来说子进程修改了a为3,父进程的a为什么还是8呢?由于虚拟内存地址和页表以及页表和物理地址空间的映射关系,父子进程此时都是一模一样的。调用fork函数可以在已存在的进程中创建一个子进程,此时,新进程。

tang20030306的博客 2604

3D高斯压缩黑科技开源!1GB场景压到42MB,Web3D迎来“WebP时刻”——SOG格式深度解析

Web3D迎来革命性突破!PlayCanvas开源全新3D高斯泼溅压缩格式SOG,将1GB场景压缩至仅42MB,体积缩小95%,加载速度提升10倍+。SOG通过将3D数据编码为WebP纹理+元数据,实现GPU零拷贝实时渲染,完美兼容WebGL/WebGPU。实测显示,4百万高斯点的场景在手机上1.5秒内完成加载,内存占用降低83%。这一技术突破为电商展示、虚拟旅游、工业设计等领域带来新机遇,开发者可通过开源工具链快速集成。SOG被誉为"3D界的WebP",有望成为下一代3D互联网的基础设

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 866

跨 Agent 语义沟通机制构建:共享知识图谱与语义对齐方法

在具身智能与多智能体系统协同日益复杂化的背景下,跨 Agent 的语义沟通能力成为任务完成效率和系统鲁棒性提升的关键技术路径。本文系统分析了当前业界在共享知识图谱、语义嵌入对齐、语义意图建模与跨模态语义通信协议设计方面的实践经验,深入讲解如何在 Habitat-MARL 与 Isaac-MARL 等平台中,基于实体-关系结构、语义分布表示与任务上下文,构建具备理解、共享、协作能力的多 Agent 语义系统。文章以工程实战为主,覆盖图谱构建、语义嵌入同步、对齐模型部署、通信接口集成等多个核心模块,结合真实应用

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1293

【Linux C | 进程】创建进程 | fork函数详解

本文详细介绍 fork 函数,并列举C语言例子进行说明。

wkd_007的博客 2592

23、视频时间码与数字同步技术详解

本文深入解析了视频时间码与数字同步技术的核心原理及应用。涵盖线性时间码(LTC)和垂直间隔时间码(VITC)的结构与特性,详细阐述了降帧时间码的补偿机制及其在影视制作中的重要性。文章还介绍了定时参考信号(TRS)在SDTV和HDTV中的实现方式,分析了辅助数据的传输结构与发展趋势,并探讨了SDI编码技术及其在不同视频标准下的差异。通过实际应用场景和技术发展影响的剖析,全面展示了这些关键技术如何支撑现代视频系统的高效运行与持续创新。

wine的专栏 239

linux fork()函数详解

Dufresne 改变从现在开始! 博客园闪存首页新随笔联系管理订阅 随笔- 126  文章- 0  评论- 57  Linux中fork()函数详解 linux中fork()函数详解(原创!!实例讲解) (转载)    一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。f

Hello,world! 1038

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

linux中fork()函数详解

linux中fork()函数详解 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都...

ll148305879的博客 713

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

linux中fork函数详解,fork() 函数详解

fork() 函数是 linux/unix 下一种特别的创建子进程的函数,它不同与 Windows,这个函数在执行成功后会有两个返回值,一个返回值==0代表创建了子进程,一个返回值大于0代表还是当前程序进程,而这个大于0的值就是创建的子进程的进程PID。这个函数比较抽象,我们来看一下代码并对比一下图片就能知道具体该函数的用途了。#include #include int main(int argc...

weixin_32127359的博客 3571

linux中fork()函数x详解

[置顶] linux中fork()函数详解(原创!!实例讲解) 分类: 计算机系统 linux2010-06-01 23:35 48956人阅读 评论(103) 收藏 举报 linux2010存储  一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的

weiqianen2009的专栏 592

Linux中fork()函数的详解

一:fork()的介绍 fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份副本,包括代码和数据段、堆、共享库以及用户栈。子进程还获得与父进程任何打开文件描述符相同的副本,当父进程调用fork时,子进程可以读写父进程中打开的任何文件。 父进程和新创建的子进程之间最大的区别在于它们有不同的PID。 fork函数只被调用...

z1911725145的博客 2262

Linux系统——fork()函数详解(看这一篇就够了!!!)

fork()函数详解(包看包会!!!) 1.fork()简介 函数原型: pid_t fork(void);//pid_t为int类型,进行了重载 pid_t getpid();// 获取当前进程的 pid 值。 pid_t getppid(); //获取当前进程的父进程 pid 值。 用于创建一个进程,所创建的进程复制父进程的代码段/数据段/BSS段/堆/栈等所有用户空间信息;在内核中操作系统重新为其申请了一个PCB,并使用父进程的PCB进行初始化; 如图所示 :我们将A 进程, 也就是调用 for

cckluv的博客 8万+

【Linux】fork()函数详解

什么是fork?fork特点

2302_76421042的博客 335

linux中fork()函数详解

http://blog.youkuaiyun.com/jason314/article/details/5640969  一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。     一个进程调用fork(

三少GG 1230

Linux中fork()函数详解

Linux中fork()函数详解 linux中fork()函数详解 (转载)    一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。     一个进程

X-X-羊的专栏 673
上一篇: 201812-4 CCFCSP 数据中心
下一篇: 机器翻译评测——BLEU算法详解
木禾DING
博客等级 码龄8年 191粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值