fork--创建进程

fork–创建进程

fork函数基本知识

pid_t fork(void)
返回值:在父进程中,成功的话返回子进程的pid,失败返回-1在子进程中,返回值pid为0

fork()函数将运行着的进程分裂出另一个子进程,它通过拷贝父进程的方式创建子进程。
子进程与父进程有相同的代码空间、文件描述符等资源 ,如下图所示:

image-20230811121236530

父、子进程的区别:

fork的返回值不一样,pid不同,ppid不同,未决信号集合文件锁不继承,资源利用量清0

进程创建后,子进程与父进程开始并发执行,谁先执行由内核调度算法来决定。

init进程:pid为1,所有进程的祖先。

代码示例

看下面的代码,观察父、子进程打印的结果

fork1.c

#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>int main()
{//定义pid号pid_t pid;printf("[%d]:Begin!\n",getpid());//在调用fork前,调用!!!!//fflush(NULL);pid = fork();if(pid < 0){perror("fork()");exit(1);}if(pid == 0) //child{printf("[%d]:Child is working!\n",getpid());}else		//parent{printf("[%d]:Parent is working!\n",getpid());}printf("[%d]:End!\n",getpid());return 0;
}

编译执行程序,父子进程的pid分别是9227和9228,如下图

image-20230810230422760

重新开启一个终端,使用如下命令,显示进程的关系

ps axf

image-20230810231304778

从上图看出,(pid=9227)./fork1的进程创建了一个(pid=9228)的进程./fork1。(pid=9227)./fork1进程的父进程是bash,即上图中pid=8760

父、子进程的输出

输出到终端

我们重新编译代码,执行,输出的内容中,Begin!输出1次,见下图:

image-20230810232005185

输出到文件

执行程序的将输出重定向一个文件中,查看文件的内容,发现Begin!内容输出了2次

image-20230810232325611

同样一份代码,为何输出的内容有差异那?
是缓冲造成的。 终端是标准输出设备, 是行缓冲模式 ,printf语句中的\n是行缓冲作用,所以\n会刷新缓冲区。 如果重定向到文件, 文件的缓冲是全缓冲模式 \n就起不到刷新缓冲的作用,只是一个换行的作用

Begin!放到缓冲区中,还没来得及写到文件里面的时候,马上执行了fork函数,父、子进程的缓冲区各自有begin,所以会有两个。

如何解决,上面的问题
要在调用fork函数前,调用fflush(NULL)函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381028.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[SAMtools] 常用指令总结

源自&#xff1a;http://sanwen.net/a/hirxmpo.html samtools是一系列处理bam和sam格式文件的应用程序集合&#xff0c;具有众多的功能。 首先呢&#xff0c;bam和sam文件主要是bwa、bowtie、tophat等序列比对工具产生的&#xff0c;这些软件我们后面会谈到。 软件下载安装&…

Glide 的超时控制相关处理

作者&#xff1a;newki 前言 Glide 相信大家都不陌生&#xff0c;各种源码分析&#xff0c;使用介绍大家应该都是烂熟于心。但是设置 Glide 的超时问题大家遇到过没有。 我遇到了&#xff0c;并且掉坑里了&#xff0c;情况是这样的。 调用接口从网络拉取用户头像&#xff0c…

高通量DNA测序数据的生物信息学方法

来源&#xff1a;大数据期刊 时间&#xff1a;2016-05-13 14:41:09 作者&#xff1a;詹晓娟 姚登举 朱怀球 詹晓娟1&#xff0c;姚登举2&#xff0c;朱怀球3 1. 黑龙江工程学院计算机科学与技术学院&#xff0c;黑龙江 哈尔滨 150050&#xff1b; 2. 哈尔滨理工大学软件学院…

C++ pair详解

pair pair在cplusplus 与CPrimer中的介绍 首先可以看到pair是一个class template —类模板 pair也是一种模板类型。 对 pair 的介绍是&#xff1a; 这个类将一对值耦合在一起&#xff0c;这些值可能是不同类型的(T1和T2)。单个值可以通过其公共成员first和second访问。 pair是…

聊聊OpenStack运维架构

前言 想一想&#xff0c;从事OpenStack杂七杂八的事儿&#xff0c;至今正好三年半了。做过QA测试&#xff08;手动的、自动的&#xff09;、CI&#xff08;gerrit、jenkins、gitlab、harbor&#xff09;、云产品封装&#xff08;从系统pxe到openstack代码&#xff09;、自动化…

Lua pairs与ipairs效率分析

介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 首先来看下 lua中table的结构定义: table中分为2个存储空间, 一个是线性数组空间(TValue *array), 和一个hash空间(Node *node) 当我们使用 pairs 和 ipairs 会产生…

【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(22):方阵函数在微分方程组中的应用

目录 前言往期文章5.6 方阵函数在微分方程组中的应用5.6.1 解一阶线性常系数齐次微分方程组5.6.2 解一阶线性常系数非齐次微分方程组 结语 前言 Hello&#xff01;小伙伴&#xff01; 非常感谢您阅读海轰的文章&#xff0c;倘若文中有错误的地方&#xff0c;欢迎您指出&#xf…

C++中pair使用详细说明

一、pair 的介绍 pair 是一个很实用的 "小玩意"&#xff0c;当想要将两个元素绑在一起作为一个合成元素、又不想要因此定义结构体时&#xff0c;使用 pair 可以很方便地作为一个代替品。 也就是说&#xff0c;pair 实际上可以看作一个内部有两个元素的结构体&#xf…

Solidity实现默克尔树 Merkle Tree

​​Merkle Tree​​​&#xff0c;也叫默克尔树或哈希树&#xff0c;是区块链的底层加密技术&#xff0c;被BTC和Ethereum区块链广泛采用。​​Merkle Tree​​​是一种自下而上构建的加密树&#xff0c;每个叶子是对应数据的哈希&#xff0c;而每个非叶子为它的​​2​​个子…

论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入

笔记整理&#xff1a;黎洲波&#xff0c;浙江大学硕士&#xff0c;研究方向为自然语言处理、知识图谱。 研究背景 知识图谱因其在问答、语义解析和命名实体消歧等任务取得了良好的效果而受到广泛关注&#xff0c;而大部分知识图谱都存在不全和缺失实体链接的问题&#xff0c;所…

致敬乔布斯的经典,锤子坚果Pro成2017年最受欢迎手机看罗永浩怎么说

锤子坚果Pro发布已经近2个月&#xff0c;但热度依旧不减。在刚刚过去的京东618活动中&#xff0c;坚果Pro在1500到2000元档位产品中一举斩获单品销量冠军。坚果Pro凭借出色的销售战绩坐实2017手机圈“黑马”之名&#xff0c;而其销量节节攀升&#xff0c;这其中必有一番原因。日…

坚果Pro 2安抚了不少人锤粉, 但用户更期待锤子T3

今年秋季&#xff0c;锤子科技创始人罗永浩于2017年11月7日在成都发布坚果系列2代手机坚果Pro 2&#xff0c;指纹和logo的融合增强了手机的一体型。软件上的再度优化&#xff0c;帮助盲人更注重人文关怀&#xff0c;再从罗永浩自带“流量”&#xff0c;坚果Pro2自然而然受到大家…

pro坚果android耗流量,深度使用坚果Pro3一个月,憋了一肚子话,不吐不快​

原标题&#xff1a;深度使用坚果Pro3一个月&#xff0c;憋了一肚子话&#xff0c;不吐不快​ 罗永浩创办的锤子手机曾经在国内手机市场&#xff0c;也是一枚耀眼的新兴&#xff0c;罗永浩对于手机工业设计的高标准严要求让锤子手机成为了国内少有的在设计上能和苹果三星比肩的手…

厉害了!原来这些文艺明星都喜欢锤子坚果Pro

最近在手机圈出现了一匹黑马&#xff0c;那就是锤子坚果Pro。在京东618期间取得了十分骄人的战果&#xff0c;荣获6月1日至18日1500-1999元价位档单品销量第一&#xff0c;成为该价格区间最受欢迎的手机&#xff0c;同时在2017年4月1日后首发的新品销量排名中位列第三&#xff…

锤子t1android驱动,锤子T1痛失安卓5.1!都是因为这?

现如今很多高端手机都开始升级安卓6.0了&#xff0c;但是情怀锤子却突然给了老用户一“锤子”&#xff0c;宣布第一代T1将不会升级到安卓5.1&#xff0c;因为“优化效果不明显”。 这顿时引发了一片争议。有的T1用户表示了理解&#xff0c;称手机够用就好&#xff0c;不在乎系统…

内蒙古大学计算机考研资料汇总

内蒙古大学研招网 内蒙古大学计算机学院 内蒙古大学计算机学院成立于1997年&#xff0c;其前身是1978年设置的计算机专业和1988年成立的计算机科学系。内蒙古大学软件学院成立于2005年&#xff0c;与计算机学院为一个实体&#xff0c;两个牌子。目前学院由计算机科学系、…

如何获取bainu文档并用斡仑office进行编码转换-永中office蒙文版

声明&#xff1a; 1.bainu软件是由内蒙古卓嘎信息技术有限公司研发的。 2.斡仑office是由内蒙古斡仑科技有限公司与永中软件股份有限公司联合开发的蒙汉多文种跨平台办公套装。 第一&#xff0c;首先我们打开bainu软件&#xff0c;如图&#xff1a; 第二&#xff0c;下列图中…

为什么 Mixin 被认为是有害的

为什么 Mixin 被认为是有害的 Mixin 是在 Vue 2 中引入的&#xff0c;作为组件之间共享代码的解决方案&#xff0c;这种方式成为许多代码库不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;它们的使用开始出现问题。尽管 mixins 最初很有吸引力&#xff0c;但现…

【从零开始学习JAVA | 第四十五篇】反射

目录 前言&#xff1a; ​反射&#xff1a; 使用反射的步骤&#xff1a; 1.获取阶段&#xff1a; 2.使用阶段&#xff1a; 反射的应用场景&#xff1a; 使用反射的优缺点&#xff1a; 总结&#xff1a; 前言&#xff1a; Java中的反射是一项强大而灵活的功能&#xff0…

1688采源宝的商家靠谱吗 怎么入驻成为阿里采源宝商家

说到采源宝&#xff0c;我想很多微商都是不陌生的&#xff0c;采源宝的主要作用就是方便微商查看并转发供应商所发布的商品&#xff0c;并在有客户下单时&#xff0c;还可以轻松向供货商去下单。但也有很多朋友对采源宝的商家靠谱吗这个问题存在很大疑惑&#xff0c;下面我们就…