当前位置: 首页 > news >正文

【Linux】第八章 监控和管理Linux进程

目录

1.什么是进程?

进程的基本组成:

2. 如何理解systemd进程?

3. ps和top有什么区别?

4. 解释 ps aux 和 ps -ef 这两个命令和参数的作用。

5. 进程状态有哪些?

6. 怎么理解作业(Job)和作业控制?

7. 说明 kill 命令中使用 9 和 15 信号量的区别。

8.什么是负载平均值(load average)?


1.什么是进程?

进程(process)是操作系统中正在运行的程序,它不仅仅是程序的代码,还包括了程序执行时所需的所有资源、上下文和状态信息。进程是操作系统资源管理的基本单位,也是执行的基本单位。

进程的基本组成:

(1)分配的内存地址空间:每个进程在操作系统中都有一块独立的内存空间。这个内存空间分为不同的区域,用于存储:

  • :用于存储函数的局部变量、函数调用的返回地址等信息。
  • :动态分配的内存区域,用于存放程序运行时申请的内存。
  • 数据段:存放程序的全局变量和静态变量。
  • 代码段:存放程序的代码。

这些内存空间保证了不同进程之间的内存隔离,防止进程间互相干扰。也就是说,一个进程不能直接访问另一个进程的内存,保护了进程的数据安全

(2)安全属性(所有权和特权)

每个进程都由操作系统分配所有者,即一个进程有其所属的用户或用户组(通常是启动该进程的用户)。操作系统通过用户和用户组来控制进程的权限。

特权指的是进程是否拥有某些系统资源的访问权限。例如,普通用户的进程不能访问或修改系统文件,而内核进程或有特权的进程可以访问系统的所有资源。

通过这种方式,操作系统确保了不同进程的权限隔离,避免了未经授权的访问。

(3)一个或多个线程

  • 进程可以包含多个线程,这些线程共同工作,共享进程的资源(如内存、文件描述符等)。
  • 每个进程至少有一个主线程,并且每个线程都有自己的执行上下文。线程是操作系统调度的最小单位,负责实际的程序执行。
  • 线程共享进程的内存空间和一些系统资源,但每个线程有自己的栈、程序计数器(PC)等执行上下文。
  • 多个线程可以在同一个进程内并发执行,提高了进程的执行效率。进程内的多个线程共享数据,并通过线程间的同步机制来进行协调。

(4)进程状态

进程在运行过程中会经历不同的状态,每个状态对应着不同的行为:

  • 就绪(Ready):进程已准备好,等待操作系统将其分配到CPU进行执行。
  • 运行(Running):进程正在CPU上运行。
  • 等待(Blocked):进程正在等待某些事件的发生,比如等待I/O操作的完成。
  • 终止(Terminated):进程完成执行或被强制终止。

操作系统管理进程的状态,通过调度算法决定哪个进程在什么时候执行。

进程的环境

进程环境指的是进程在执行时的所有上下文信息和资源配置,保证进程能够正确运行并与系统和其他进程进行交互。

进程环境的组成:

(1)本地和全局变量

  • 本地变量:指在进程内部、线程内部定义的变量。它们仅在进程或线程的执行上下文中有效。
  • 全局变量:指在进程内部共享的变量,进程中的所有线程都能访问。全局变量在多线程程序中是共享的,需要进行同步处理。

(2)当前调度上下文

调度上下文是指操作系统记录的当前进程执行状态。这包括:

  • 寄存器的值:进程当前执行的指令、程序计数器(PC)等。
  • 内存状态:进程使用的栈、堆、代码段等信息。
  • 调度信息:如进程的优先级、调度策略等。

每当操作系统切换进程时,它会保存当前进程的调度上下文,并加载新进程的调度上下文。这样可以保证进程能够在切换后从中断的地方继续执行。

(3)分配的系统资源

操作系统为每个进程分配了一些资源,确保进程能够正常运行并与外部环境进行交互。例如:

  • 文件描述符:每个进程可以打开一定数量的文件,每个文件有一个唯一的文件描述符来标识。
  • 网络端口:进程需要通过网络与其他系统通信时,操作系统为其分配网络端口。
  • 共享库和外部资源:进程在执行时可能依赖于外部的库文件或硬件资源,操作系统负责管理这些资源。

这些资源的分配和管理保证了进程在执行时不发生资源冲突。

2. 如何理解systemd进程?

当前进程(parent) 通过 fork() 复制自己的地址空间来创建一个新的(子) 进程,新进程是父进程的一个副本,会继承父进程的很多特征(如代码、数据、文件描述符等),但会有独立的进程ID和某些资源。

systemd 是第一个启动的进程,进程ID为 1,是所有其他进程的父进程。systemd 在系统启动时初始化操作系统,启动和管理用户空间进程,服务和其他重要资源。

systemd 作为 PID 1 进程,不仅负责系统的初始化过程,还负责进程的管理、日志记录、设备管理等任务。

3. ps和top有什么区别?

ps(Process Status):是一个静态命令,用于显示当前系统中进程的快照(即当前时刻的进程状态)。它显示的进程信息是静态的,即运行命令时显示的进程列表并不会自动更新。

top:是一个动态命令,用于显示当前系统进程的实时信息。它不断更新进程信息,可以动态显示系统资源使用情况,包括 CPU 使用率、内存使用率、进程信息等。

4. 解释 ps aux 和 ps -ef 这两个命令和参数的作用。

ps aux 用于显示当前系统中所有用户的所有进程信息。

  • a:显示所有用户的进程。

  • u:以用户为中心的格式显示进程信息,输出中包含进程的所有者(用户)、进程的 CPU 和内存使用情况等。
  • x:显示没有控制终端的进程(如后台进程)。默认情况下,ps 只显示属于当前终端的进程,通过添加 x 参数,可以查看没有终端的进程。

ps -ef 用于显示当前系统中所有进程的详细信息。

  • -e:显示所有正在运行的进程,相当于 a 选项。显示系统中的所有进程,不仅仅是当前终端或当前用户的进程。
  • -f:以完整格式显示进程信息,输出包含进程的父进程 ID (PPID)、启动时间、占用的终端等详细信息。

5. 进程状态有哪些?

  • R(Running or Runnable)正在运行,或者准备好运行(在可运行队列中等待 CPU 时间片)。

  • S(Sleeping):正在睡眠(等待某些事件的发生,比如 I/O 操作完成,或者某个信号到达等)。
  • D(Uninterruptible Sleep):进程在“不可中断睡眠”状态中,通常是因为等待某些硬件操作(如硬盘或网络)完成。
  • T(Stopped):进程被停止,通常是通过接收 SIGSTOP 信号或 Ctrl+Z(在终端下暂停进程)暂停的。
  • Z(Zombie):僵尸进程,进程已经完成执行并终止,但它的父进程尚未读取它的退出状态,因此该进程仍然在进程表中。
  • I(Idle):进程处于空闲状态,通常是 CPU 核心在空闲时的状态。
  • W(Paging):进程在进行虚拟内存到物理内存的页面交换操作,通常是由于内存压力很大时发生。进程正在等待页面交换完成,这可能会导致性能问题。
  • X(Dead):这表示进程已经结束并且已经完全清理,不再保留任何状态信息。

6. 怎么理解作业(Job)和作业控制?

作业 是在一个终端会话中启动的一个或多个相关进程的集合。每个作业都有一个唯一的作业编号。作业可以包含一个或多个进程,这些进程可以同时执行或相互依赖。

作业控制 是shell提供的一种功能,允许用户在一个shell实例中运行和管理多个命令。它使得用户能够将作业在 前台(一个终端同一时间只能有一个前台作业)和 后台(&)之间切换,以及暂停和恢复执行。可以通过 bg 命令将一个暂停的作业转到后台,也可以使用 fg 命令将后台作业恢复到前台。你可以使用 ctrl+z 将一个正在前台运行的作业暂停,并放到后台(即发送 sigstop 信号)。

7. 说明 kill 命令中使用 9 和 15 信号量的区别。

kill 命令需要提供进程ID,发送信号。kill -signal PID。

SIGTERM (信号量 15) :优雅终止,通知进程"请自行退出",允许进程执行清理操作(如保存数据、关闭文件、释放资源等)。建议选该操作。

SIGTERM (信号量 9) :强制终止,直接由操作系统内核终止进程,不给予清理机会,不可被捕获、阻塞或忽略,可能导致资源泄漏(如临时文件未删除、共享内存未释放)。

pkill 可以根据进程名或其他属性来查找并终止进程。

SIGKILL 常被滥用,无法挽救,太致命,而且容易不释放资源,所以建议还是先 SIGTERM(15),然后尝试SIGINT (2) ,实在关不掉再用 SIGKILL(9)。

8.什么是负载平均值(load average)?

系统的 负载平均值 是衡量系统工作负荷的一个重要指标。内核每隔5秒收集负载数, 汇总到1分钟、5分钟和15分钟移动平均值,负载数由 CPU 上准备运行的进程数(进程状态为 R)和等待磁盘或网络 I/O 完成的进程数(进程状态为 D)决定。如果系统负载很高,但是 CPU 压力不高,则要考虑磁盘和网络负载过大。

uptime 命令显示当前 load average,lscpu 显示cpu数量。如果 load average 除以cpu数量,接近1,表示cpu负载非常高。

http://www.xdnf.cn/news/4195.html

相关文章:

  • 关于Diamond机械手的运动学与动力学的推导
  • 【力扣刷题】49字母异位词分组,不用哈希,c语言实现
  • 《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化
  • 基础知识 - 结构体
  • 首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析
  • 从“链主”到“全链”:供应链数字化转型的底层逻辑
  • 智能sc一面
  • 【cocos creator 3.x】cocos creator2.x项目升级3.x项目改动点
  • 士兵乱斗(贪心)
  • 前端api(请求后端)简易template
  • Python高级爬虫之JS逆向+安卓逆向1.5节: 控制结构
  • docker harbor私有仓库登录报错
  • Ubuntu利用docker搭建Java相关环境问题记录
  • 如何有效防止服务器被攻击
  • 在激烈竞争下B端HMI设计怎样打造独特用户体验?
  • 数组理论基础
  • 从GPT到Gemini 大模型进化史
  • ADVB发送器设计
  • Matter如何终结智能家居生态割据,重构你的居住体验?
  • 随手笔记-python-opencv 读取图像的顺序 与pytorch处理图像的顺序
  • Mysql的安装
  • Java面试(2025)—— Spring
  • FPGA入门学习Day1——设计一个DDS信号发生器
  • opencv HSV的具体描述
  • 【Java学习笔记】关键字汇总
  • 赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale
  • ESP32- 开发笔记- 硬件设计-ESP32-C3 天线设计-利用嘉立创EDA来设计
  • 数码管LED显示屏矩阵驱动技术详解
  • Gitignore详解:版本控制中的文件忽略机制
  • 秒杀系统解决两个核心问题的思路方法总结:1.库存超卖问题;2.用户重复抢购问题。