【Linux】fork()函数

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、fork()函数
  • 二、fork()函数的读时共享,写时复制
  • 三、循环fork

操作系统给用户提供了一系列的函数接口,让用户进行与进程有关的编程。

一、fork()函数

fork()函数用于创建一个子进程,调用fork()函数的是父进程
该子进程与父进程几乎完全相同,父子进程的代码共享,但是他们的进程id(PID)不同。
fork()函数拥有两个返回值:

  • 父进程的fork()函数返回子进程的pid
  • 子进程的fork()函数返回0

父进程进行代码的全部,子进程执行从fork()函数后的代码,父子进程同时执行

fork()函数的使用举例:

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("11111111\n");
	pid_t pid;
	pid = fork();
	if(pid > 0)
	{
		//Father
		printf("Father pid:%d \n",getpid());
	}
	else if(pid == 0)
	{
		//Child
		printf("Child pid:%d,Father pid:%d\n",getpid(),getppid());
	}
	else
	{
		perror("processs fail\n");
	}
	printf("22222\n");
	getchar();
	return 0;
}

image.png

可以看出 父进程执行了:
printf(“11111111\n”);
printf(“Father pid:%d \n”,getpid());
printf(“22222\n”);
getchar();

子进程执行了:
printf(“Child pid:%d,Father pid:%d\n”,getpid(),getppid());
printf(“22222\n”);
getchar();
子进程并没有执行fork()函数以上的代码。

如何看出父子进程是同时执行的呢?
在子进程代码块中加入getchar()阻塞,

image.png
这次子进程并没有继续向下执行printf(“22222\n”);
image.png

二、fork()函数的读时共享,写时复制

传统的fork()函数会将父进程的资源拷贝一份继承给子进程,但是子进程可能不会用到这个拷贝的资源,造成浪费

写时复制指的是在子进程(或父进程)试图访问父进程的资源时,才将父进程的资源拷贝一份,然后修改这个资源的副本,不影响其他进程共享读取原来的资源(读时共享)

三、循环fork

以下的代码会创建几个子线程,共有多少个线程?

fork();
fork();

image.png

for(int i = 0;i < 3;i++)
{
	fork();
}

image.png

子进程: 2 i − 1 2^i -1 2i1

总进程数量: 2 i 2^i 2i


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

wordpress找不回密码怎么办?4种方法设置新密码

有些WordPress站长太久不登录后台了&#xff0c;所以就忘记了管理员登录密码&#xff0c;这种情况我们应该怎么找回密码呢&#xff1f;或者设置一个新密码呢&#xff1f;下面boke112百科就跟大家分享4种方法设置WordPress新密码。 方法一、登录页面的“忘记密码&#xff1f;”…

16. 输入设备应用编程

16. 输入设备应用编程 1. 输入类设备编程介绍1.1 什么是输入设备1.2 input 子系统1.3 读取数据的流程1.4 应用程序如何解析数据 2. 读取 struct input_event 数据3. 按键应用编程4. 触摸屏应用编程4.1 解析触摸屏设备上报的数据4.1.1 单点触摸设备——事件上报顺序4.1.2 多点触…

消息中间件RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

Unix环境高级编程-学习-04-匿名管道PIPE

目录 一、环境 二、介绍 三、C标准函数介绍 1、pipe 2、popen 3、pclose 4、注意 四、宏 五、常见的管道用法 1、一对一&#xff08;父进程读子进程写一条管道&#xff09; 2、一对一&#xff08;父进程写子进程读一条管道&#xff09; 3、一对多&#xff08;父进程…

代码随想录算法训练营DAY6 | 哈希表(1)

DAY5休息一天&#xff0c;今天重启~ 哈希表理论基础&#xff1a;代码随想录 Java hash实现 &#xff1a;java 哈希表-CSDN博客 一、LeetCode 242 有效的字母异位词 题目链接&#xff1a;242.有效的字母异位词 思路&#xff1a;设置字典 class Solution {public boolean isAnag…

微搭低代码从入门到精通02数据源的介绍

目录 1 数据源的功能组成2 在低码编辑器中调用数据源的能力3 视频讲解 一款低代码产品好不好用&#xff0c;数据建模的能力是一个重要的衡量指标。因为灵活的定义表之间的关系&#xff0c;自由的选择字段的类型&#xff0c;尤其在我们依据模型自动生成页面的时候是比较重要的。…

Windows Server 2025 LTSC 预览版来了

Windows Server 2025 LTSC 预览版来了 1. 安装 Windows Server 2025 LTSC 预览版2. 安装 VMware Tools3. Windows Server 2025 LTSC 预览版4. Windows Server 2025 LTSC 预览版下载地址 1. 安装 Windows Server 2025 LTSC 预览版 使用 VMware Workstation 安装&#xff0c; 安…

JVM实战(30)——模拟堆内存溢出

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

JVM内存调优常用参数

视频讲解地址 文章目录 一、开始二、常用命令1、原生命令2、arthas命令 三、Parallel四、G1 相关参数五、通用参数六、JVM调优参数 一、开始 查看当前JDK版本所支持的垃圾回收器有哪些、以及默认使用的回收器 java -XX:PrintFlagsFinal -version | grep -E \<Use.*GC\>J…

类和对象(2)之类的6个默认成员函数(2)

上次我们梳理了初始化和清理的知识点&#xff0c;今天我们要梳理的是拷贝赋值的知识点。 拷贝构造函数 看到拷贝构造函数这个名字就能看的出来它是一个构造函数&#xff0c;所以它的语法和构造函数很相似。 既然他是一个构造函数&#xff0c;那么他就具有构造函数的语法&…

前端颜料盘??

前端颜料盘&#xff1f;&#xff1f; 一、原生颜料盘 <input type"color" placeholder"选择颜色">二、第三方开源库 Pickr&#xff1a; GitHub: https://github.com/Simonwep/pickr官方网站: https://simonwep.github.io/pickr/Pickr 是一个轻量级…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

Java 字符串 07 练习-手机号屏蔽、身份证号信息查看,游戏骂人敏感词替换

注意点&#xff1a;只有返回值才是被截取的小串&#xff0c;所以需要有一个变量去承接它&#xff1b; 自己写的代码&#xff1a; import java.util.Scanner; public class practice {public static void main(String[] args) {Scanner input new Scanner(System.in);String …

离散数学4

谓词公式与量词的辖域 谓词逻辑中量词的符号化 例3&#xff0c;没有人不犯错误&#xff0c;可以理解为&#xff0c;有人不犯错误&#xff0c;用存在量词&#xff0c;因为用的是存在量词&#xff0c;就用合取 可以分步理解&#xff0c; 所有大学生都喜欢歌星&#xff1a; 所有…

HTML实战

HTML实战 标题 标题排版 img标签路径书写的两种方式&#xff1a; 绝对路径 绝对磁盘路径&#xff1a;C:\User…绝对网络路径&#xff1a;https://i2.sinaimg.cn/dy/deco/2012/0613/yocc20120613img01/news_logo.png 相对路径 ./ : 当前目录 ../ &#xff1a; 上一级目录宽…

ARL灯塔vps云服务器安装

前提是vps服务器已经安装好docker 1、下载压缩包到本地 2、解除不能扫描edu等域名的限制 解压docker_arl.zip&#xff0c;打开docker_arl/config-docker.yaml文件 删除掉edu.cn等限制域名(图中已删除) 3、上传至vps云服务器 将docker_arl文件上传到云服务器opt目录下 这里我…

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细

在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…

12种相关系数汇总,别再以为只有皮尔逊了!

所谓相关关系是指2个或2个以上变量取值之间在某种意义下所存在的规律&#xff0c;其目的在于探索数据集所存在隐藏的关系网&#xff0c;在19世纪80年代&#xff0c;Galton通过研究人类身高遗传问题首次提出了相关的概念&#xff0c;文中指出相关关系可以定义为&#xff1a;一个…

PGsql 解析json及json数组

创建测试数据 drop table if exists json_test; create table json_test as select 111 as id, {"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表1","nodeType":"DATACO…

报错“MySql配置文件已损坏,请联系技术支持”的解决方法

目录 第一步 打开控制面板&#xff0c;选择管理工具&#xff0c;再选择事件查看器 第二步 在【应用程序】里找到这条报错&#xff0c;记下来文件内容。我自己的来源是“MsiInstaller” 第三步 winR组合键&#xff0c;输入regedit打开注册表 第四步 根据前面报错的文件名定位…