【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个


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

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

相关推荐
SPC的存折2 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
小疙瘩3 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
我是伪码农4 小时前
外卖餐具智能推荐
linux·服务器·前端
皮皮林5515 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH5 小时前
Linux 的 od 命令
linux·运维·服务器·bash
Kk.08026 小时前
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
linux·运维·算法
2501_945318496 小时前
备考方案:针对数据分析师的知识结构,制定攻克赛一认证的最优学习路径
学习·百度
数据雕塑家7 小时前
Linux下大文件切割与合并实战:解决FAT32文件系统传输限制
linux·运维·服务器
IMPYLH7 小时前
Linux 的 nice 命令
linux·运维·服务器·bash
l1o3v1e4ding7 小时前
排查linux CentOS7.6的mysql磁盘 I/O 延迟过高问题
linux·运维·mysql