【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对应的进程过滤掉的意思。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/465153.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一,其操作出色,体检佳,是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前,Professional一直在不断的演变更新,以适应当前的新技术,从…

Coursera上Golang专项课程2:Functions, Methods, and Interfaces in Go 学习笔记

Functions, Methods, and Interfaces in Go Course Certificate 本文是学习 Functions, Methods, and Interfaces in Go 这门课的学习笔记,如有侵权,请联系删除。 文章目录 Functions, Methods, and Interfaces in GoMODULE 1: FUNCTIONS AND ORGANIZ…

Selenium-webdriver_manager判断是否已经下载过驱动(复用缓存驱动)

1,谷歌浏览器默认位置 2,ChromeDriverManager 下载的驱动位置 其中admin为机器的用户名 def installDriver(self):"""判断是否需要下载driver""""""找到本机谷歌浏览器版本""""""C:\P…

mysql驱动的下载和JDBC的使用(在idea上)

1.mysql驱动的下载 在这里我们需要进入中央仓库中去下载mysql驱动的下载。 https://mvnrepository.com/ 上面就是中央仓库的网址。 如图: 上面就是中央仓库的网址首页。 1.在上面搜索框内输入mysql 如图: 这里呢,上面的mysql 是8.0以上版…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念,再进行实际操作。概念比较偏术语化,第一次看可能看不懂,建议多看几遍,再尝试自己独立复述一遍,效果会好些 1.1. IOC容器 1.1.1. 控制反转(IOC) IOC (Inversion of Con…

多标签分类新建模方法

常见的多标签分类方法是同时生成多个标签的logits,然后接一个sigmoid激活函数做二分类。该方法简单直接,但忽略了标签之间的相关性。虽然业界针对该问题提出了很多解决思路,但大多是任务特定,通用性不强,也不够优雅。 …

利用生成式人工智能进行功能管理测试

就 DevOps 而言,生成式 AI与功能管理测试的新兴集成标志着一次重大演变。我们将认真研究这项技术如何彻底改变我们创建测试环境的方式。 使用人工智能生成测试使我们能够模拟大量的用户场景和环境,这意味着我们可以开发和部署不仅好而且很棒的功能&…

pyspark基础 -- DataFrame的理解与案例

DataFrame(df)介绍 datafram就是一个内存中的二维表结构,具备表结构的三个基本属性: 行列表结构描述 在结构层面,pyspark中的StructType对象描述了表结构,StructField对象描述了表的一个列信息;在数据层面&#xff…

Epuck2 在 ROS 下的运动控制

文章目录 前言一、初始配置二、运动控制三、移动机器人总结 前言 在对Epuck2机器人进行完固件更新及IP地址查询后,接下来通过ROS来对Epuck2机器人进行运动控制。 一、初始配置 (1)创建一个 catkin 工作空间 mkdir -p ~/catkin_ws/src cd ~…

2023年蓝桥杯模拟省赛——列名

目录 题目链接:2.列名 - 蓝桥云课 (lanqiao.cn) 思路 高级思路:进制转换 难点一 难点二 难点三 总结 题目链接:2.列名 - 蓝桥云课 (lanqiao.cn) 思路 先来看我的暴力的思路吧 主要有以下步骤: 初始化一个长度为3的数组res用…

WEB前端项目开发——(一)(2024)

目录 1 通过Git Bash安装 vue-cli 2 创建项目 3 解决Git Bash方向键失效 4 重新进行项目创建 5 浏览器输入地址查看 6 案例——简单修改v3-calendar中的内容 7 测试页面效果 本篇文章介绍通过了Git Bash创建v3-calendar项目,之后对v3-calendar进行简单…

ChatGPT国内镜像站大全

#今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用ChatGPT吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像站到处都是&…

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

【C语言】linux内核软中断

一、什么是软中断? 内核中的软中断(Softirqs)和任务下半部(Tasklets)是Linux内核中用于在中断上下文之外处理中断服务的一种底层机制。这些机制解决了不能在中断服务例程(ISR)中执行耗时操作或…

ChatGPT :确定性AI源自于确定性数据

ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…

Linux下进程的调度与切换

🌎进程的调度与切换 文章目录: 进程的调度与切换 进程切换 进程调度       活动状态进程队列       位图判断       过期队列 总结 前言: 在Linux操作系统中,进程的调度与切换是操作系统核心功能之一&#xff…

【LabVIEW FPGA入门】流水线

LabVIEW中流水线 在当今多核处理器和多线程应用程序的世界中,程序员在开发应用程序时需要不断思考如何最好地利用尖端 CPU 的强大功能。尽管用传统的基于文本的语言构建并行代码可能难以编程和可视化,但 NI LabVIEW 等图形开发环境越来越多地允许工程师和…

学习笔记 | 微信小程序项目day02

今日学习内容 安装uni-ui跟uni-helper/uni-ui-types配置pinia持久化请求工具类的拦截器请求工具类的请求函数 安装uni-ui跟uni-helper/uni-ui-types npm install -g cnpm --registryhttps://registry.npmmirror.com npm set registry https://registry.npmmirror.com npm i …

电脑充电器能充手机吗?如何给手机充电?

电脑充电器可以给手机充电吗? 电脑充电器可以给手机充电,但前提是电脑充电器的功率输出与手机的功率匹配且接口匹配。 假设电脑充电器的输出功率为5V/2A,手机也支持5V/2A的输入功率。 只要接口匹配,就可以使用电脑充电器给手机充…

2024智慧农场系统微信小程序前端如何上传以及配置

2024智慧农场系统微信小程序前端如何上传以及配置 首先下载微信开发者工具 下载好以后打开,然后导入项目 前端修改:siteinfo.js 里面的域名信息 改完之后开始在微信开发者工具中开发工具中编译、上传、发布即可