前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”
才能更好的理解进程的含义。
本篇主要内容:
在学习进程之前,大家对进程肯定初步的了解,那么今天我们来深入了解一下
基本概念:
在上一篇中,我们提到了: 管理的本质不是管理个体,而是管理个体的数据!
而操作系统管理进程也是如此,管理的进程对应的数据
而在操作系统对进程上,依然采用的是“先描述,再组织”的方法
操作系统将可执行程序的各种数据加载,拷贝出来,再用结构体把数据存进去,由于可能同时会存在多个进程,所以操作系统使用链表或其他数据结构将它们链接在一起!
而这个又操作系统产生控制进程的结构就是PCB
PCB:
在CPU对进程列表进行处理时,PCB中的数据有时不会被CPU立刻处理,因此他会进入进程队列,排队等待处理
操作系统内由于进程的控制十分复杂,一个PCB可能链接到多个数据结构上。
因此: 进程=可执行程序 + 内核数据结构(PCB)
每一个进程都有自己对应的标识符当我们想查看进程的信息:
指令:
ps ajx
这样做的话我们查看的是所有进程,这里我们就要用到之前的学过的指令了。
现在我们来写一个程序来观察他的进程状态
写死循环方便我们更好观察,运行程序我们再打开一个窗口,搜索程序的进程:
指令:
ps ajx | grep mytest
此时,为什么会出现两个进程呢?
我们直接查看进程并不能知道每个数据表达的意思,所以我们可以加上:
指令:
ps ajx | head -1
来查看每一行的信息
指令:
ps ajx | head -1 && ps ajx | grep 可执行程序
在我们刚接触Linux时,通常按CTRL+c可以结束进程,现在在学习Linux进程时,还有一种方法可以杀死进程:
指令:
kill -9 进程id
注意:这里的-9是信号参数,后面会提到,现在直接使用即可
使用指令能直接杀死进程
以上说明我们所有运行的指令,软件,自己写的可执行程序都是进程!
每次查看进程使用如果都要使用ps查看这样的话很浪费时间且繁琐,因此我们可以使用即将学习到的第一个系统调用函数:
函数:
getpid
我们先来简单了解一下 getpid
用系统调用函数查看PID
在使用ps指令查看进程信息时,除了PID我们可以看见左边还有一个PPID,当我们不断地启动结束进程时,PID每一次的数据都不一样,但是PPID却不会改变。而这PPID就是父进程
我们依然可以用函数来查看父进程:
函数:
getppid
因此我们可以知道这两个函数:
当我们不断地启动结束进程时,PID每一次的数据都不一样,但是PPID却不会改变,让我们来查看一下父进程信息
如果我们直接杀死父进程bash,那么我们的shell会直接挂掉
本篇主要学习的是进程的概念,CPU如何对PCB进行处理,以及初步学习如何查看父进程与子进程,希望大家能理解好PCB,下篇我们将深入了解进程的创建!
谢谢大家支持本篇到这里就结束了