文章目录
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号系统进程领养孤儿进程