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

相关文章
|
1天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
19 4
linux进程管理万字详解!!!
|
1天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
3天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
15 2
|
3天前
|
消息中间件 存储 Linux
|
9天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
10 1
|
9天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
55 1
|
21天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
16 1
|
26天前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
22 0
Linux c/c++之IPC进程间通信
|
26天前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
17 0
Linux c/c++进程间通信(1)
|
6天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息