【操作系统】了解Linux操作系统中PCB进程管理模块与进程PID

本篇要分享的内容是有关于操作系统中进程的内容。

目录

1.进程的简单理解

2.了解task_struct(进程控制模块)内容分类

3.task_struct(进程控制模块)中的PID

4.调用查看PID的函数


1.进程的简单理解

首先我们需要理解的是什么是程序、什么是进程。

简单理解进程就是可执行程序+内核数据结构(PCB);

这里的PCB所指的就是process control block(进程控制模块),也可以称作为task_struct,也就是们运行中的程序所对应的各种信息都会被存放在PCB中。

我们先从最简单的部分开始理解,在我们平时写完代码时,将代码运行起来时会在我们的磁盘上生成.exe文件,同时生成窗口,我们可以随便运行一些程序再打开我们的任务管理器,就可以看到这些进程的信息

我们都直到操作系统是帮助我们管理进程、文件、内存、设备等等方便于我们能更好的和我们的计算机交互,那么接下来我们深入研究操作系统如何对进程管理和组织。

2.了解task_struct(进程控制模块)内容分类

task_struct是Linux下的进程管理模块,我们需要了解一下它的内容

1.标示符: 描述本进程的唯一标示符,用来区别其他进程。
2.状态: 任务状态,退出代码,退出信号等。
3.优先级: 相对于其他进程的优先级。
4.程序计数器: 程序中即将被执行的下一条指令的地址。
5.内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
6.上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
7.I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
8.记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
...其他信息

这些信息我们可以对比windows系统下的PCB查看

但是因为windows操作系统的设置当前我们只能看到进程任务的名称 。

3.task_struct(进程控制模块)中的PID

首先需要理解的一个概念是进程所对应的标识符又叫做 PID (process id),他是描述本进程的唯一标示符,用来区别其他进程。

由于一些原因我们无法在Windows系统中查看进程的PID,所以需要打开我们的Linux操作系统;

那么本章要分享的内容与进程有关

所以在命令行中输入ps axj,即可查看Linux系统中的进程

 

那这一行就是进程所对应的属性的信息,其中就有我们上面提到过的PID,所以我们这里关注PID。

在文章开始时我们简单对进程有过了解,就是将我们敲的代码通过操作系统运行起来就是一个进程,那我们不妨写一个简单的代码让他跑起来;

 如上时一个循环打印;将他运行起来

可以看到他已经循环打印

接下里我们复制再我们的操作台用来查看刚刚运行起来的进程

这里使用  ps axj | grep 运行起来的文件名

可以看到再使用查看进程的命令后出现了两行我们并不懂的信息,我们一一对其解释。 

同时还要介绍另一个命令

ps axj | head -1

这个指令可以查看我们的标头的信息;

所以我们不妨将这两个命令一起使用,就可以看到标头信息和它对应的数值

 

可以看到我们运行起来的程序,也就是进程的PID就是821311

那在下面PID为821630的进程又是什么呢?其实当我们使用指令查进程时,查进程本身的动作也会变成进程,我要去追你,我自己也要动起来,所以在查进程时会将自己也查出来。

下面我们将右边的进程,也就是循环打印终止,再输入查进程的命令

 可以看到结果查找不出刚刚的进程了。

所以根据以上结论我们就可以得出结论:我们所写的所有指令,软件,程序最终都是进程。

那么在Windows操作系统下更容易看到

比如这里打开微信

 可以看到任务管理器中就有了微信的进程,自然结束进程后相对应的进程也会被终止。

4.调用查看PID的函数

当然除了上述方法可以看到进程的PID之外,还可以通过函数来查看PID;

我们在Linux中查看PID的使用手册

简单理解这个手册中所说的用法就是

调用PID可以可以使用

getpid()

可以将它理解为一个函数,它的作用就是获取进程的标识符,返回值是PID(在此意为哪个进程调用了它,就返回哪个进程的PID),那么头文件<sys/types.h>就告诉着我们这是一个有关于系统的函数和头文件。

在代码中使用

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
        int i=0;
        while(i<=100){
                pid_t id=getpid();
                printf("这是一个进程,PID为:%d\n",id);
                sleep(1);
        }
}
~        

将其运行起来

这个进程会一直调用函数获取PID;

那直到了PID之后我们就可以使用PID方便对其管理 ,比如我们需要结束一个进程

kill -9 PID

简单使用

可以看到我们使用kill -9  加上PID命令时就可以结束PID对应的当前的进程 ;

就像Windows操作系统中在任务管理器中结束进程,在手机上杀后台。

以上就是有关PCB的简单理解和对PID简单的理解和使用,如果对你有所帮助,还请多多三连支持,感谢您的阅读。

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值