【Linux】fork()函数

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!

主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

🔥c++系列专栏:C/C++零基础到精通 🔥

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

c语言内容💖:

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

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


目录

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

一、fork()函数

fork()函数用于创建一个子进程 ,调用fork()函数的是父进程

该子进程与父进程几乎完全相同,父子进程的代码共享,但是他们的进程id(PID)不同。

fork()函数拥有两个返回值:

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

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

fork()函数的使用举例:

cpp 复制代码
#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;
}

可以看出 父进程执行了:

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()阻塞,

这次子进程并没有继续向下执行printf("22222\n");

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

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

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

三、循环fork

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

cpp 复制代码
fork();
fork();
cpp 复制代码
for(int i = 0;i < 3;i++)
{
	fork();
}

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

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


|--------------------------------------|
| 大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |

|---------------------------------------------------------------|
| 大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |

相关推荐
05大叔23 分钟前
多线程的学习
java·开发语言·学习
白露与泡影27 分钟前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
CQ_YM35 分钟前
Linux管道通信
linux·c语言·管道·ipc·管道通信
لا معنى له1 小时前
目标分割介绍及最新模型----学习笔记
人工智能·笔记·深度学习·学习·机器学习·计算机视觉
月光在发光1 小时前
多态(虚函数核心作用原理)--C++学习(0)
c++·学习
车载测试工程师2 小时前
CAPL学习-AVB交互层-媒体函数2-其他类函数待分类
学习·tcp/ip·媒体·capl·canoe
深蓝海拓2 小时前
PySide6从0开始学习的笔记(十) 样式表(QSS)
笔记·python·qt·学习·pyqt
k***92162 小时前
【Linux】进程概念(五):详解环境变量的本质
linux·运维·服务器
世转神风-2 小时前
VMware-挂载报错:no mountpoint specified
linux
KakiNakajima2 小时前
CentOS 7 x86系统安装EMQX 【kaki备忘录】
linux·运维·centos