文章目录
🎪 进程的描述组织
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体,简单来说,进程就是一个正在运行的程序,是担当分配系统资源的实体
🚀1.什么是进程
我们前面说了进程是一个正在运行的程序,我们上一篇博客(博客链接:冯诺依曼体系结构和操作系统概念理解)中说到:操作系统诞生的意义就是对计算机软硬件资源进行管理,而管理的本质就是先描述,在组织,每个进程包含它对应的代码和数据,而描述进程的就是数据结构叫PCB(进程控制块),而每个PCB里面包含着进程相关的信息,每款操作系统都有自己的PCB,而Linux自己的PCB是task_struct,task_struct的相关信息如下:
- 标示符: 描述本进程的唯一标示符,用来区别其他进程
- 状态: 任务状态,退出代码,退出信号等
- 优先级: 相对于其他进程的优先级
- 程序计数器: 程序中即将被执行的下一条指令的地址
- 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]
- I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表
- 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
- 其他信息
🚀2.进程的形成
当我们打开一个程序(本质上也是文件),实际上它是被加载到了内存中,也就变成了进程。我们之前任何启动并运行程序的行为,都会有操作系统帮助我们将程序转换成进程,完成特定的任务。
我们启动应用程序的时候,OS会将对应的程序的代码和数据加载到内存,并且会形成当前程序对应的PCB,将其链接。总之:进程 = 内核中关于程序对应的数据结构 + 对应的代码和数据
🚀3.进程标识符 *
进程标识符(PID)是大多数操作系统的内核用于唯一标识进程的一个数值。(简言之,就是进程的绰号。)这一数值可以作为许多函数调用的参数,以使调整进程优先级、kill(命令)进程之类的进程控制行为成为可能。
⭐3.1 PS命令查看PID
这里我们先写一个C程序,命名为process1.c.
process1.c
#include <stdio.h>
#include <unistd.h>
int main()
{
while (1)
{
printf("我是一个进程,我叫process1.\n");
sleep(2);
}
return 0;
}
这里为了便于观察我们加上sleep函数,让它休眠2s,sleep()
函数的头文件为<unistd.h>
,在通过make自动化构建:
Makefile
process1:process1.c
gcc process1.c -o process1
.PHONY:clean
clean:
rm -f process1
这里我们为了便于观察,复制一个ssh渠道
我们开始运行我们的程序process1(每2s循环打印)
命令:
ps -axj
功能:查看当前所有进程
我们通过管道过滤出process1:输入ps -axj | grep process1
我们找到了进程,可是它前面那串数字是什么呢?我们键入命令:ps -axj | head 1
查看它的第一行.
另外我们查看我们自己的process1进程的时候,发现它下面还有一个含有关键字process1的进程,那么它是什么呢?我们之前说过Linux每一个命令实际上也是一个可执行文件,那么我们用的grep当然也是进程,所以说显示的当然是grep的进程,我们将它过滤掉即可:ps -axj | head -1 && ps -axj | grep process1 | grep -v grep
这样我们就找到了process1的PID为20824
⭐3.2 /proc目录查看进程属性
在 Linux 系统中,/proc 目录是一个位于内存中的伪文件系统。该目录下保存的并不是真正的文件和目录,而是一些【运行时】的信息,如 CPU 信息、负载信息、系统内存信息、磁盘 IO 信息等。/proc目录是内核提供给我们的查询中心,通过查询该目录下的文件内容,可以获取到有关系统硬件及当前运行进程的信息。
./proc存放的是进程相关的所有信息,在硬盘上并不存在,在操作系统开机后才会创建.每新建一个进程,操作系统都会在/proc目录下新建一个以进程PID命令的目录,我们可以通过这个目录来查看该进程属性.
我们进入该目录,即可查看process1进程相关信息。
当process1这个进程被杀死,那么该PID目录将不复存在:
命令:
kill -9 PID
功能:杀死PID对应的进程
杀死