进程的基本概念

文章目录

  • 1.进程是什么
  • 2.描述进程-PCB
    • 2.1为什么要描述进程
    • 2.2PCB和task_struct
    • 2.3task_struct内容分类
  • 3.查看进程和组织进程
  • 4.通过系统调用获取进程标识符
  • 5.通过系统调用创建进程——fork
    • 5.1fork初识
    • 5.2进一步了解fork
  • 6.进程状态
    • 6.1查看Linux源代码的工具
    • 6.2进程的几种状态解析
      • 6.2.1R状态
      • 6.2.2D状态
      • 6.2.3T状态
  • 7.僵尸进程(Z状态)
    • 7.1什么是僵尸进程
    • 7.2为什么要有僵尸进程
    • 7.2僵尸状态的特征
    • 7.3父进程是如何读取子进程信息的
  • 8.孤儿进程
    • 8.1什么是孤儿进程
    • 8.2孤儿进程有什么危害以及解决办法

1.进程是什么

程序的一个执行实例,正在执行的程序等。担当跟配系统资源(cpu时间,内存)的实体。
在这里插入图片描述

2.描述进程-PCB

2.1为什么要描述进程

便于对进程的管理
OS是一款搞管理的软件,它的管理方式是先描述再组织,进程也需要被管理,因此进程也需要被描述起来
在这里插入图片描述

2.2PCB和task_struct

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合,这个数据结构就叫做PCB;

task_struct是linux内核的一种数据结构,它会被装载到内存里并且包含着进程的信息;
在这里插入图片描述

2.3task_struct内容分类

task_struct是用来描述进程的,那么它的里面包括哪些描述内容呢?
在这里插入图片描述

3.查看进程和组织进程

进程的组织方式可以在内核源代码里找到它,所有运行在系统里面的进程都以task_struck链表形式存在Linux内核里

大多数进程信息可以通过ps工具查看,也可以通过/proc系统文件夹查看
1.ps aux
显示所有进程

2.ps axj
会显示父进程,子进程,还有命令,用来查看进程之间的父子关系.

3.proc系统文件夹查看

4.top命令查看CPU所有命令
在这里插入图片描述

4.通过系统调用获取进程标识符

进程id(PID)
父进程id(PPID)
在这里插入图片描述

5.通过系统调用创建进程——fork

5.1fork初识

1.fork的作用是创建一个新进程
2.fork没有参数
3.fork有两个返回值
4.fork通常用if分流
在这里插入图片描述

5.2进一步了解fork

1.如何理解进程创建
2.fork为什么有两个返回值
3.fork执行顺序和数据复制问题
在这里插入图片描述

6.进程状态

系统中的进程的状态不是唯一的,一个进程可以有几个状态(在Linux内核里面,进程有时候也叫做任务)

6.1查看Linux源代码的工具

source insight4.0
破解版工具和使用方法链接

6.2进程的几种状态解析

我们常见的操作系统书籍讲的理论是具有总结性的,即使用所有的计算机系统,因此在表述上面会与Linux系统有细微差别
在这里插入图片描述
在这里插入图片描述

6.2.1R状态

当进程有IO操作时,处于R状态的时间是很少的,R状态进程不一定在CPU上面跑
在这里插入图片描述
在这里插入图片描述

6.2.2D状态

D状态的进程除非自身拿到数据或者重启服务器,否则是不能被杀掉的
在这里插入图片描述

6.2.3T状态

T状态是可以随时恢复的
在这里插入图片描述

7.僵尸进程(Z状态)

7.1什么是僵尸进程

僵死状态状态是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出返回代码时就会产生僵尸进程;
僵尸进程会以终止状态保持在进程列表之中,并且会一直等待父进程读取退出状态代码;
所以,只要子进程退出,父进程还在运行,但父进程没有读取到子进程状态,子进程便进入僵死状态,即子进程变成僵尸进程
在这里插入图片描述

7.2为什么要有僵尸进程

保持进程基本信息,方便父进程读取,获得子进程退出原因;
举个例子:假如有一个人在你面前突发疾病去世了,这时你应该选择立即报警,警察需要调查那个人死亡的原因。
假设我们的父进程是警察,子进程是那个去世的人,于是有:
进程死亡:父进程要进行系统调用,检测进程运行完的时候的情况(1.是否正常运行,2.是否发生了异常,3.发生了什么异常)

7.2僵尸状态的特征

在这里插入图片描述

7.3父进程是如何读取子进程信息的

父进程是通过调用wait/waitpid来获取子进程信息的
在这里插入图片描述

8.孤儿进程

8.1什么是孤儿进程

如果父进程先退出,子进程就被称为孤儿进程
在这里插入图片描述

8.2孤儿进程有什么危害以及解决办法

孤儿进程变成僵尸进程后没有回收,会造成内存泄漏,解决的办法是1号系统进程领养孤儿进程
在这里插入图片描述

热门文章

暂无图片
编程学习 ·

MySQL 简洁速查手册

MySQL 速查手册 文章目录MySQL 速查手册0. 前言1. 开启/关闭数据库2. 数据库操作3. 数据表操作4. 字段操作5. 数据操作6. 运算符7. 高级查询(group by、having、order by、limit)8. 高级插入9. 高级删除10. 高级更新11. 联合查询12. 连接查询12.1 左外连接12.2 右外连接13. 子查…
暂无图片
编程学习 ·

电信云堤·抗D(电信云堤清洗高防服务器)提供超强T级DDoS处理能力

电信云堤”下辖四大产品: 电信云堤DDoS攻击防护(简称“电信云堤抗D”) 电信云堤域名安全防护(简称“电信云堤域名无忧”) 电信云堤反钓鱼网站处置(简称:“电信云堤反钓鱼”) 电信云堤网站安全专家(简称:“电信云堤网站安全专家)电信云堤抗D “电信云堤抗D”依托于中…
暂无图片
编程学习 ·

前端适配问题总结

前端适配问题总结视口布局的优点:宽度和高度全部自动适应!再加上rem布局的字体适应,可以完美解决各种屏幕适配问题!1.vw:1vw等于视口宽度的1%。2.vh:1vh等于视口高度的1%。3.vmin:选取vw和vh中最小的那个。4.vmax:选取vw和vh中最大的那个。vh and vw:相对于视口的高度…
暂无图片
编程学习 ·

IDEA常用快捷键或修改为Eclipse快捷键风格

Ctrl + Y 删除当前行 Ctrl + D 复制当前行到下一行 Ctrl + Z 撤销 Alt+Enter 导入包,自动修正 Ctrl+F 查找文本 Ctrl+U 大小写切换 Ctrl+W 选中代码,连续按会扩大范围 Ctrl+R 替换文本快捷键改为eclipse快捷键风格Ctrl+Alt+S 或者打开File选择Settings这就完成了
暂无图片
编程学习 ·

自动驾驶论文解析(7)

本文解析论文: A Practical Trajectory Planning Framework for Autonomous Ground Vehicles Driving in Urban Environments 来自国防科大团队 文章依旧沿用了经典的横向的空间规划,和纵向的速度规划。在横向上,横向位置是关于纵向距离S的三阶多项式。纵向上速度是关于时间…
暂无图片
编程学习 ·

yolov5训练测试

书接上回,下面测试一下yolov5的训练。 参考文章目录官方教程1.数据集下载2.启动tensorboard3.训练4.结果4.1 打印信息4.2 测试训练的权重4.2 Apex 官方教程 官方tutorial(打不开的话,把整个仓库(迟早要下)下下来然后自己打开这个文件) 从这个位置开始读(前面工作在另一篇…
暂无图片
编程学习 ·

Python——走马灯

走马灯 def f():import times=人生苦短,我学Pythonc=0while True:print(s)time.sleep(0.3)#休眠0.3秒。每隔0.3秒,即300毫秒显示一行代码s=s[1:]+s[0]c+= 1if c==2*len(s):break f()输出结果 人生苦短,我学Python 生苦短,我学Python人 苦短,我学Python人生 短,我学Python…
暂无图片
编程学习 ·

网上书城项目分析及前端页面

网上书城项目分析及前端页面项目分析背景/价值需求/功能需求功能划分前端页面实现登录and注册效果代码主页面效果代码搜索页面效果代码购物车页面效果代码思维导图总结 项目分析 背景/价值 背景 个人书店的业务管理使用 价值 方便个人书店的推广 角色 老板 消费者 思维导图需求…
暂无图片
编程学习 ·

thinkphp5.0集成phpword,生成word文档并下载

** 目录 ** 安装 使用 安装 github下载地址:https://github.com/PHPOffice/PHPWord 也可直接使用composer安装, composer require phpoffice/phpword使用 你需要的controller用命名空间的方式引入 use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\PhpWord;在contro…
暂无图片
编程学习 ·

Dota 四五号位(辅助)理解

两个辅助打团等于3打5?我怕你是没经历东血魔北迪法南幻刺西巨魔中火枪的年代。你看这阵容是不是5大哥,咋不扎实?要输出有输出,要gank有gank,一个个还灵活得一批。dota发展到如今这个程度,辅助真的是越老越吃香,比如国土比如毛毛鸭比如爱沙尼亚拳王等等。他们的年龄很难做…
暂无图片
编程学习 ·

Java实现文件浏览器下载

前言:先说下需求,项目需求是用户一点击一个前端页面的链接就可以下载一个压缩包.因为就1个文件,使用文件管理系统像fastDSF,阿里云的OSS这种没必要,直接放在nginx服务器上的怕不好管理,于是给我限定了把文件打包到部署时候的jar包中并实现浏览器下载. 废话不多说,直接上代码! 1…
暂无图片
编程学习 ·

数据库语句和数据库表常用的操作命令

Mysql的启动与关闭启动 net start mysql关闭 net stop mysql显示当前服务器版本 SELECT NERSION();显示当前的日期 SWLECT NOW();显示当前用户 SELECT USER(); 数据库语句(DDL)查看数据库 show databases;创建数据库 create database demo;查看警告信息 show warnings;查…
暂无图片
编程学习 ·

eslint代码规范配置

要求或禁止使用分号代替 ASI (semi) 命令行中的 --fix 选项可以自动修复一些该规则报告的问题。 该规则强制使用一致的分号。 semi: [“error”, “always”]; 复制代码 等级 : “error” 选项 “always”: (默认) 要求在语句末尾使用分号 默认选项 “always” 的 错误 代码示例…
暂无图片
编程学习 ·

MySQL--02(安装)

A:MySQL的安装 Linux/UNIX 上安装 MySQL Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: 1.MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。 2.MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器…
暂无图片
编程学习 ·

95-190-544-源码-window-清除器(Evictors)-DeltaEvitor简介

1.视界2.前文回顾 得益于 Flink Window API 松耦合设计,我们可以非常灵活地定义符合特定业务的窗口。Flink 中定义一个窗口主要需要以下三个组件 Window Assigner Trigger Evictor3.概述 ​ Evictor:可以译为“驱逐者”。在Trigger触发之后,在窗口被处理之前,Evictor(如果…
暂无图片
编程学习 ·

Jmeter之JDBC的使用

(一)环境准备 1、下载mysql-connector-java-x.x.x.jar放到 jmeter根目录的lib目录下,重启jmeter(二)数据库配置 1、在测试计划下面,添加一个setup线程组2、在setup线程组下,添加一个配置元件JDBC Connection Configuration3、填写配置信息 Variable Name:数据库连接池的…
暂无图片
编程学习 ·

二进制与十进制转换工具类

package util;/*** 二进制工具类* * @author 谢辉* @time 2020.07.01**/ public class BinaryUtil {/*** 十进制数字转二进制* * @param num 十进制数字* @param strResult 结果容器,追加结果用,* @return 返回结果字符串*/public static String DecimalToBinary(Integ…