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

Linux进程的认识

在这里插入图片描述

查看进程指令proc/ps

注意哦, 我们经常使用的指令, 像ls, touch…这些指令在启动之后本质上也是进程

proc 是内存文件系统, 存放着当前系统的实时进程信息. 每一个进程在系统中, 都会存在一个唯一的标识符(pid -> process id), 就如同学生在学校里有一个专门的学号一样.

在这里插入图片描述

大多数进程信息同样可以使用topps这些用户级工具来获取

ps命令 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。
ps的选项
在这里插入图片描述
在这里插入图片描述
**head -1 **只输出第一行
在这里插入图片描述

grep -v命令

在这里插入图片描述

kill进程终止

kill -9是杀死进程的终极武器。一般情况下慎用,以防产生什么系统故障或者影响软件的再运行环境。
在这里插入图片描述

获取子ID(getpid)

在这里插入图片描述

从运行结果可以看出,我们的子类进程的ip只要一结束重写运行ip就会变,但是父类ip不会变,父类不变说明命令行所有指令都是bash的子进程
在这里插入图片描述

在这里插入图片描述

创建子进程(系统调用创建进程 fork)

fork()如果成功了返回值为子进程的id并且0返回给子进程,如果失败了返回-1给父类,没有子进程创建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

问题1:为什么fork要给子进程返回0,给父进程返回子类的id呢?

他们赋值不同是为了区分不同的执行流,执行不同的代码,一般而言fork之后的代码都是父子共享。
这是因为后期父类会对子类进行修改,所以我们需要提前保存子类的id,而子类可以通过getpid函数来得到父类的id,所以只需要赋值0标记创建成功即可

问题2:一个函数是如何做到返回两次的?

在我们fork后,同一个程序会执行两次,这是因为新建的子类和父类的代码时共用的且不可被修改。除非我们做一下判断返回值的选项来分别输出
在这里插入图片描述
在这里插入图片描述
那么我们为什么要创建子进程呢?
这是因为我们不想让父和子做同样的事情,需要想办法分开输入,所以我们就从frok()的返回值下手

那么是如何做到返回两次的呢?这是因为fork是一个函数,它内部对马上要进行的子进程进行了一些包裹,最后我们return的时候会返回两次,这是因为return语句是父和子共享的,所以就会出现两个结果,输出两次
在这里插入图片描述

问题3:一个变量怎么会有不同的内容?

当fork了一个子进程后,如果子进程没有新的成员或者函数方法,并且也没有对父类进行修改,则这是它和父类是共用的同一空间和代码区。
当他重写了父类的方法或者自己新建了函数、变量,则这是系统会为他新建一块空间,这是我们叫
写时拷贝
当fork执行成功后,如果父子进程被创建好,谁先运行是由调度器来决定的。

http://www.lryc.cn/news/99510.html

相关文章:

  • 向量vector与sort()
  • Netty学习(三)
  • c++学习(布隆过滤器)[23]
  • React的UmiJS搭建的项目集成海康威视h5player播放插件H5视频播放器开发包 V2.1.2
  • 细讲TCP三次握手四次挥手(二)
  • LeetCode Top100 Liked 题单(序号19~)
  • qssh使用
  • 持续部署CICD
  • ARM 循环阻塞延迟函数
  • Spark的DataFrame和Schema详解和实战案例Demo
  • WPF线程使用详解:提升应用性能和响应能力
  • ava版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台
  • libuv库学习笔记-basics_of_libuv
  • 【Vuvuzela 声音去噪算法】基于流行的频谱减法技术的声音去噪算法研究(Matlab代码实现)
  • Vue + Element-ui组件上传图片报错问题解决方案
  • java商城系统和php商城系统对比
  • 某制造企业基于 KubeSphere 的云原生实践
  • Electron 学习_BrowserWindow
  • Docker学习笔记,包含docker安装、常用命令、dockerfile、docker-compose等等
  • 解决 “Module build failed (from ./node_modules/babel-loader/lib/index.js)“ 错误的方法
  • go学习 6、方法
  • MySQL Windows版本下载及安装时默认路径的修改
  • 第3章 配置与服务
  • Arcgis之 KML/KMZ文件转shp
  • python绘制3D条形图
  • 计算从曲线的起点到param指定的点的曲线段的长度
  • POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 数据压缩和打包处理与数据更新
  • linux----源码安装如何加入到系统服务中(systemclt)
  • Unity 使用UnityWebRequest 读取存档 (IOS只能这样做)
  • Caused by: org.springframework.beans.factory.