【Linux】进程的基本概念(进程控制块,ps命令,top命令查看进程)

       

目录

01.进程的基本概念

程序与进程

进程的属性

02.进程控制块(PCB)

task_struct的内容分类

组织进程

03.查看进程

ps命令

top指令


        在计算机科学领域,进程是一项关键概念,它是程序执行的一个实例,是操作系统的基本单位。本文将从进程的基本概念到内核观点的深入理解,以及Linux操作系统下的具体实现等方面逐步探讨进程的相关知识。

01.进程的基本概念

程序与进程

程序与进程之间存在着密切的关系,但并不是同一个概念。

程序

  • 程序是一组指令的集合,是静态的代码文件,通常存储在磁盘或其他存储介质中。
  • 程序是计算机执行特定任务的指令序列,它描述了如何处理输入数据以产生输出结果。

进程

  • 进程是程序的执行实例,是操作系统中的基本执行单位。
  • 进程包括了程序的执行状态、内存空间、资源分配情况等信息。
  • 每个进程都有自己的唯一标识符(PID),并且可以独立运行和被操作系统调度。

        用生活中的例子来解释,程序就像是一本菜谱,描述了如何准备一道菜的步骤、所需的食材以及烹饪方法,但它本身并不会做任何事情而进程则是根据菜谱准备食物的实际过程,它是程序在执行过程中的动态实例。就像你可以同时烹饪多道菜一样,操作系统可以同时执行多个进程,每个进程都在独立地执行它们的指令,拥有自己的资源和状态。

进程的属性

        进程的属性包括了唯一标识符、状态、优先级、程序计数器、内存指针、上下文书籍、I/O状态信息、记账信息等。这些属性描述了进程在执行过程中的各个方面,是操作系统进行进程管理的基础。进程信息存放在名为进程控制块的数据结构中,也可以称之为进程属性的集合。

02.进程控制块(PCB)

        在内核观点中,进程被认为是担任分配资源的实体。而进程的信息被存放在一个称为进程控制块的数据结构中,它是进程属性的集合,包含了进程在执行过程中所需的所有信息。

        在LInux操作系统中,描述进程的结构体称为"task_struct".它被装载到内存中,并包含了进程的所有信息。"task_struct"是Linux内核的一种数据结构。

task_struct的内容分类

标示符

描述本进程的唯一标识符,通常是一个PID(进程ID),用来区别其他进程。

状态

包括任务状态、退出代码、退出信号等,描述了进程当前所处的状态和执行情况。

优先级

相对于其他进程的优先级,用来决定进程在调度时的执行顺序。

程序计数器

记录了程序中即将被执行的下一条指令的地址,用来指示进程当前执行的位置。

内存指针

包括了程序代码和进程相关数据的指针,以及与其他进程共享的内存块的指针,用来管理进程的内存空间和数据共享。

上下文数据

指进程执行时处理器的寄存器中的数据,包括了寄存器的状态、程序计数器等,是进程从一个状态切换到另一个状态时需要保存和恢复的信息。

I/O状态信息

包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表等,用来描述进程的I/O操作情况。

记账信息

包括了处理器时间总和、使用的时钟数总和、时间限制、记账号等,用于统计和记录进程的运行情况和资源消耗情况。

组织进程

在Linux内核源代码中,所有运行在系统中的进程都以"task_struct"链表的形式存在内核中。这种组织形式方便了操作系统对进程的管理和调度。

03.查看进程

进程的信息可以通过 /proc系统文件夹查看

大多数进程信息同样可以使用ps或top工具来获取

ps命令

ps命令用于显示系统中当前运行进程的信息。它提供了许多选项,可以根据需要显示不同的进程信息。以下是它的常用选项:

  • -e:显示所有进程信息。
  • -f:显示详细的进程信息,包括父进程的PID、CPU利用率等。
  • -u user:显示指定用户的进程信息。
  • -aux:显示所有用户的所有进程信息,并且以更详细的方式显示。
  • -p pid1,pid2,...:显示指定PID的进程信息。
  • -N:显示与指定条件不匹配的进程信息。
  • -o format:指定显示的输出格式。

 示例:

在使用ps命令查找某一进程的信息时,可以结合“grep”命令,例如

ps aux | grep proc

这样就会筛选出名称为proc的进程的信息

此时为什么会用两个进程的信息呢,第一行时proc进程的信息,第二行其实是grep的进程信息,grep命令在输出时会给匹配的文本添加高亮颜色,如果不想看到grep进程信息,可以使用-v选项

此时就只有proc进程的信息了。

        注意:有时候可能因为没用正确方式终止程序导致留下一个僵尸进程或者后台进程,这个时候虽然程序没有在运行,但是进程信息仍然会显示在ps命令的输出中。这个时候就需要使用“kill”命令终止程序(一般的程序只需要ctrl+c就可以终止)下面看一个例子:

还是proc程序,运行时加入选项&,此时就会生成一个后台程序,ctrl+c无法进行终止

此时复制一个当前窗口,获取该进程PID并输入kill指令

这样进程就终止了

 

top指令

        top命令是一个用于实时监测系统进程的工具,它可以显示系统当前正在运行的进程以及它们的资源占用情况。运行top命令后,会在终端显示一个实时更新的进程列表,包括进程的PID、用户、CPU占用率、内存占用率等信息。

top命令以交互方式运行,可以在列表中执行一些命令:

  • q 键退出 top 命令。
  • k 键输入一个进程的 PID 并按回车,然后输入一个信号值(例如 9 表示 SIGKILL),可以杀死指定的进程。
  • u 键输入一个用户名,可以过滤显示属于该用户的进程。
  • ? 键可以查看更多可用的命令列表。
  • P 键按 CPU 占用率排序。
  • M 键按内存占用率排序。

        还可以通过在命令行中指定选项来修改 top 命令的默认行为。例如,你可以使用 -d 选项指定更新间隔时间,使用 -n 选项指定显示进程的数量等。

以上就是进程的一些相关知识的整理了~

总结:

        进程作为计算机系统中的基本概念,承载着程序的执行实例,是操作系统进行资源分配和管理的核心。通过对进程的基本概念、内核实现以及创建和调度的深入探讨,我们能够更好地理解操作系统中进程管理的机制。觉得博客对你有帮助的,点赞关注支持一下吧~😉

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【逆向】利用Objection实现移动应用抓取https流量

那女孩对我说 说我保护她的梦 说这个世界 对她这样的不多 她渐渐忘了我 但是她并不晓得 遍体鳞伤的我 一天也没再爱过 🎵 黄义达《那女孩对我说》 在移动应用开发和安全测试中,抓包是一项重要的技能,它可以帮助开发者和…

Mybatis的核心配置文件

MyBatis的全局配置文件mybatis-config.xml,配置内容如下: properties(属性)settings(全局配置参数)typeAliases(类型别名)typeHandlers(类型处理器)objectFa…

面试知识汇总——垃圾回收器(分代收集算法)

分代收集算法 根据对象的存活周期,把内存分成多个区域,不同区域使用不同的回收算法回收对象。 对象在创建的时候,会先存放到伊甸园。当伊甸园满了之后,就会触发垃圾回收。 这个回收的过程是:把伊甸园中的对象拷贝到F…

flutter项目使用ffi和原生交互问题积累

一、动态库和静态库调用不了的问题 1.flutter项目中运行iOS使用静态库.a问题 错误信息:Invalid argument(s): Failed to lookup symbol native_add:dlsym(RTLD_DEFAULT, native_add): symbolnot found 解决: 使用xcode打开Runner.xcworkspace&#xff0c…

跨时钟域学习记录(二)——XPM_CDC

本文以Xilinx提供的xpm_cdc代码为例,整理处理跨时钟域数据传输的常见方法。 宏定义 Xilinx定义了多个宏定义代替描述触发器行为的always块,列举如下 宏名称含义XPM_XSRREG带同步复位/置位的同步寄存器XPM_XSRREGEN带同步复位/置位和使能的寄存器XPM_XA…

【物联网】Qinghub Kafka 数据采集

基础信息 组件名称 : kafka-connector 组件版本: 1.0.0 组件类型: 系统默认 状 态: 正式发布 组件描述:通用kafka连接网关,消费来自kafka的数据,并转发给下一个节点做相关的数据解析。 配置文…

网络七层模型之物理层:理解网络通信的架构(一)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Visual Studio 常用快捷键大全

前言 对于开发者而言,熟悉快捷键的使用,能够起到事半功倍的作用,提高工作效率。以下是我整理的一份Visual Studio常用快捷键清单,希望能够帮助到你。 常用快捷方式 快捷键功能Ctrl K C注释选定内容Ctrl K U取消注释选定内容…

Vue 3.0 中一些主要的生命周期钩子

Vue 3.0 的生命周期钩子与 Vue 2.x 有所不同,但基本的概念和用途是相似的。这些钩子函数允许你在组件的不同阶段执行特定的逻辑。以下是 Vue 3.0 中一些主要的生命周期钩子: setup():这是 Vue 3 引入的一个新钩子,它在组件创建之前…

如何忽略Chrome最小字号的限制

通过控制台调整字体大小时,可以发现即便设置了小于12px的字号,也并不会变小,这是因为Chrome默认最小字号为12px。 在Chrome设置中的外观选项卡中可以发现,默认字体是16px。将最小字号改为0,就能随意设置小于12px的字号…

spring boot商城、商城源码 欢迎交流

一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的商城 联系: V-Tavendor

文件编辑命令—vim

1.vim vim 是vi的升级版本.vi 文件名(vi方向键用不了) vim 的官方网站 (welcome home : vim online) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 2.安装vim sudo apt install vim 如果出错了:apt update:刷新软件源; 出现"无法获得锁 之类的"sudo rm 文件…

Java 如何针对不同类型判断一个对象是否为空

在Java中,要判断一个对象是否为空,通常需要考虑不同类型的对象。下面是针对不同情况的一些常用方法: 判断引用类型对象是否为null: 对于引用类型的对象,可以使用简单的判空操作来检查是否为null。 Object obj null…

后端常问面经之并发

volatile 关键字 volatile关键字是如何保证内存可见性的?底层是怎么实现的? "观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令”lock前缀指令实际上相…

2015年认证杯SPSSPRO杯数学建模D题(第二阶段)城市公共自行车全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 D题 城市公共自行车 原题再现: 城市交通问题直接影响市民的生活和工作。在地形平坦的城市,公共自行车出行系统是一种很好的辅助手段。一般来说,公共自行车出行系统由数据中心、驻车站点、驻车桩、自行车&…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…

2024年碑林区软科学研究项目申报类型方向、时间流程要求

一、征集类型及研究方向 项目类型:重点支持综合运用自然科学、社会科学和工程技术多门类、多学科知识,为科技和经济社会发展的重大决策提供支撑。 项目支持以“五大发展理念”为指导,围绕科技、经济、民生等社会发展问题,开展对策研究,包含但不限于:加快培育新质生产力、秦创…

【Java八股面试系列】中间件-Redis

目录 Redis 什么是Redis Redis解决了什么问题 Redis的实现原理 数据结构 String 常用命令 应用场景 List(列表) 常用命令 应用场景 Hash(哈希) 常用命令 应用场景 set(集合) 常见命令​编辑 应用场景 Sorted Set(有序集合) 常见命令​编辑 应用场景 数据持…

idea中gradle编译下运营main方法报CreateProcess error=206

问题描述 CreateProcess error206 文件名或扩展名太长 问题分析 解决方案 build.gradle文件里添加 buildscript {repositories {maven {url "https://plugins.gradle.org/m2/"}}dependencies {classpath "gradle.plugin.ua.eshepelyuk:ManifestClasspath:1.…

kali MSF网络安全框架

MSF,全称The Metasploit Framework,简称MSF,是一个强大的网络安全框架,主要用于进行渗透测试和漏洞利用。它提供了丰富的模块和工具,帮助安全研究人员和渗透测试人员发现、利用和修复系统中的安全漏洞。 操作: 不夸张…