当前位置: 首页 > news >正文

Linux进程概念二

我们利用fork函数来辅助我们讲解进程

首先认识两个调用进程地址的函数:getpid(),和getppid(),他们分别可以调用自己的pid和父进程的pid

fork()可以在代码层面来创建子进程,一般而言,父进程fork出来的子进程与父进程代码和数据相同,头文件是<unistd.h>,返回值是get_t:

看到图示的代码和之前理论所说,会发现有很多问题,我们来一一解决:

1,为什么给id返回0的是子进程而返回id大于0的是父进程?

        父进程要对子进程进行管理,也就是权限更大,而子进程无权管辖父进程,所以没必要给子进程返回pid,而父进程因为要管理子进程所以可接收子进程的pid

由图可得知,父进程的pid和子进程的ppid互相对应

在进程fork之后,父进程与子进程的代码是共享的,一般来说不能被修改

但是数据是可以被修改的,原先是和父进程共享同一个数据,但是系统会检查你是否对子进程的数据修改,如果修改了,系统就会触发写时拷贝(往后细说),会把父进程的数据复制下来给子进程修改使用,这也使得子进程具有一定的独立性。

那我们为什么要创建子进程?:为了完成与父进程不一样的工作。

2,理解为什么一个函数会有两个返回值?

一般来说,我们写代码的时候函数return一次之后就会直接退出销毁,为什么fork函数却可以返回两次返回值?

通过上面的知识储备我们知道,fork会创建一个代码共享数据独立的子进程,也就是说在fork创建出一个子进程的时候,这时父进程和子进程会同时运行,并且通过拷贝,父子进程的代码段和数据也是暂时相同,但是我们知道,每个进程都会有自己的pid,父进程创建的子进程也不例外也有自己的pid,同时被cpu进行调度,所以父进程和子进程本质上就是一个代码相同,数据不同的两份程序或代码,本质上也是属于调用了两个函数,所以这就是为什么一个函数会有两个返回值的原因:

3,一个变量为什么会有两个不同的内容?

这个问题可以从前面的讲解中推导出来,在我们对子进程的数据进行写入修改的时候,系统会促发写时拷贝,让子进程的数据与父进程的数据相互独立,修改时互不影响,又因为父进程和子进程本质上就是两个同时运行的代码,所以可以实现一个变量两个不同内容。

4,fork函数究竟在干什么?

综上所述,fork函数的作用就是在运行的时候创建一个子进程,并返回子进程的pid,通过上面的讲解,我们可更深刻的认识到fork的作用与进程的理解。


http://www.mrgr.cn/news/42004.html

相关文章:

  • 会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰
  • Node.js env 环境变量多种配置方式
  • java基础 day1
  • 什么是转义字符
  • 系统安全 - Linux /Docker 安全模型及实践
  • 【k8s之深入理解调度】调度框架扩展点理解
  • 精华帖分享 | 因子构建思考1
  • 【c++游戏小技巧-3】多管齐下·多线程
  • 云原生(四十一) | 阿里云ECS服务器介绍
  • OpenJudge | Binary Tree
  • 1000题-计算机网络系统概述
  • 【高阶数据结构】深度探索二叉树进阶:二叉搜索树概念及其高效实现
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)
  • 解决ModuleNotFoundError: No module named ‘torchcrf‘
  • 【数据结构】红黑树相关知识详细梳理
  • macos vscode+dosbox 8086汇编语言开发调试环境搭建方法 包含所有相关的工具的下载和安装配置方法
  • 前端面试如何说解vue项目性能优化,你确定不来看看吗?
  • strcmp和strncmp
  • 滚雪球学Oracle[4.4讲]:游标管理
  • 【MySQL】DML数据操作语句和基本的DQL语句