【Linux】对进程PCB的理解&&查看进程信息的方法

简介: 【Linux】对进程PCB的理解&&查看进程信息的方法

一、学习准备:对操作系统工作模式的理解

       首先我们要清楚的是,操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。每一个硬件的生产产商都会给他们的产品提供对应的驱动程序,驱动程序是特定于某一硬件或系统设备的软件组件,它为系统提供管理硬件的各种功能。当软件需要实现某些功能,而这些功能无法通过应用程序单独实现或难以实现时,驱动程序就能派上用场。操作系统通过驱动程序对底层的硬件进行管理。

       对上要给用户提供良好的使用体验,用户所进行的任何操作都不能越过操作系统。在任何一门语言中,如果一个函数运行的结果会影响到硬件,比如说printf打印数据到显示屏上,scanf从键盘中读取数据,那这个函数底层一定会封装系统调用函数。系统调用函数即保证了操作系统中数据的安全性,又方便了用户操作。

       那为什么我们好像很少见到系统调用接口呢?原因是如果我们要使用系统调用接口的话,我们本身就应该对操作系统有一定的认知和了解,所以有人就对系统调用接口进行了封装,形成了库(例如C标准库),方便使用者直接使用库函数就可以达到使用系统调用接口同样的使用效果。进一步的说,正是对系统调用函数进行了封装,才使诸如C语言,C++等各种编程语言具有了跨平台性,我上层同样都是调用printf函数,在linux操作系统下我就去调用linux下的系统调用函数(封装在C标准库),在Windows操作系统下我就去调用Windows下的系统调用函数(封装在C标准库),这样我即使不了解操作系统,只通过上层的语言也可以和操作系统进行交互,不同操作系统的差异已经在封装这一层被屏蔽掉了,这就是我们所说的语言的跨平台性。下面是计算机的层状结构图:

二、进程的理解

       可执行程序被加载到内存,加载的是程序的代码和数据,可是操作系统并不认识哪些代码和数据对应哪些进程。所以,操作系统在加载可执行程序形成进程的同时,会创建一个描述该进程的结构体,称为PCB(process control block,进程控制块),linux操作系统下称之为task_struct。操作系统通过PCB中的各种属性信息(状态,优先级,内存指针字段,标识符......),就能够了解到这个进程的属性信息,进而控制进程的运行。此后,操作系统对于进程的管理,就转换成了对于PCB链表的增删查改。进一步的,我们可以了解到,进程就等于内核数据结构加可执行程序。未来,所有对进程的操作和控制,都只和进程的PCB有关,和进程的可执行程序没有关系。

PCB的大致属性信息

标示符: 描述本进程的唯一标示符,用来区别其他进程。

状态: 任务状态,退出代码,退出信号等。

优先级: 相对于其他进程的优先级。

程序计数器: 程序中即将被执行的下一条指令的地址。(扩展:CPU 有pc指针,pc指针存放的是当前执行指令的下一条指令的地址,pc指针指向那个进程的代码,哪个进程就被调度执行。当进程被切换出去(例如,由于时间片用完或发生中断)时,其当前的PC指针值会被保存到对应PCB的程序计数器中。当进程再次被调度执行时,操作系统会从这个程序计数器中恢复PC指针的值,从而确保进程可以从之前中断的地方继续执行。程序计数器是进程上下文切换的关键部分,它使得多个进程可以共享同一个CPU,而每个进程看起来都像是在独占CPU上执行。)

内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

上下文数据: 进程执行时处理器的寄存器中的数据。

I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

其他信息......

三、查看进程

ps axj:在Linux系统中用于查看关于进程的更多信息

其中pid就是进程对应的标识符,ppid就是进程的父进程对应的标识符

ps ajx | head -1 && ps ajx | grep 关键字:查看和包含关键字的进程的信息

        ps ajx | head -1就是把ps ajx内容的第一行取出来,&&是合并的意思,ps ajx | grep 关键字查看和包含关键字的进程的信息。

        以上就是包含了myprocess关键字的进程的信息,第一个就是我刚刚运行起来的myprocess可执行程序,那有人就会问了,那这里的第二个进程又是什么呢?grep本身在进行信息提取的时候,它的提取关键字是包含了myprocess的,在grep提取信息的时候它自己也要变成进程,所以grep进程本身也被显示出来了。通过这里我们也可以知道,几乎所有的独立的指令,就是程序,运行起来也要变成进程。

while :; do ps ajx | head -1 && ps ajx | grep 关键字 | grep -v grep; sleep 1; done

       这一串指令可以对含有关键字的进程进行实时的监控。 grep -v grep是把上面的grep对应的进程过滤掉的意思。

相关文章
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
10月前
|
监控
ps 进程中的字段信息
该表介绍了进程管理中的关键字段,包括进程ID、用户、CPU与内存使用情况、运行时间、状态及优先级等信息,用于监控和分析系统中各进程的资源占用与运行状态。
382 10
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
1800 21
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2669 10
|
Ubuntu Linux 图形学
推广与体验Ubuntu Linux的便捷方法
如果你的朋友或家人对尝试Linux感兴趣,但希望在安装之前先体验一下,你可以分享以下链接给他们:Ubuntu在线导览。通过这个链接,他们可以在任何地方轻松体验Ubuntu,无需安装即可深入了解这个流行的操作系统。
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
364 0
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
406 0
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
289 0