目录

1:什么是进程

1.2 进程的环境配置

1.3 进程的运行状态

2 什么是作业

3:如何传递信号

4:如何监控进程活动


1:什么是进程

进程的本质就是一个运行中程序的实例,在操作系统上是调度与分配资源的基本单位。

  1.1进程的构成

(1)分配的内存区域

进程在运行时会分配一系列的内存区域,包括:

代码段(Text Segment):存储可执行代码。

数据段(Data Segment):存储全局变量和静态变量。

堆(Heap):动态分配内存的区域。

栈(Stack):存储局部变量和函数调用的上下文。

内存映射区(Memory Mapping Area):用于映射文件、设备或其他内存区域。

(2)一个或多个线程

在现代操作系统中,进程可以包含多个线程。线程是进程的执行单元,共享进程的内存空间和其他资源。Linux中的线程通过pthread库或clone系统调用实现。每个线程有自己的程序计数器(PC)、栈和寄存器状态,但它们共享进程的代码段、数据段和堆。

(3)进程状态

进程在运行过程中会处于不同的状态,这些状态由进程控制块(PCB)记录,包括:

运行态(Running):进程正在CPU上运行。

就绪态(Ready):进程准备好运行,但正在等待CPU调度。

阻塞态(Blocked):进程因等待某些事件(如I/O操作)而暂时停止运行。

僵尸态(Zombie):进程已经结束,但其父进程尚未读取其状态信息。

(4)所有权凭据和特权

进程运行时需要一定的权限和凭据来访问系统资源,这些包括:

用户ID(UID)和组ID(GID):标识进程的所有者和所属用户组,用于访问控制。

有效用户ID(EUID)和有效组ID(EGID):用于权限检查,可能与实际用户ID不同。

特权级别(Privilege Level):Linux使用用户态和内核态来区分权限级别,内核态具有更高的权限,可以访问系统的核心资源。

1.2 进程的环境配置

每一个进程在创建前都会进行相应的环境配置,包括

  1. 从父进程继承环境变量
  2. 创建一个或多个线程
  3. 文件描述符绑定
  4. Selinux上下文绑定
  5. PCB创建存储进程的状态,PID和响应信息

1.3 进程的运行状态

-running(R) :程序正在运行

-runnable(R):程序正在就绪,等待分配cpu资源就开始运行

-stopped(T):程序被暂停了

-zombie (Z):程序已经执行完毕了,除PID还没有释放,其它系统资源已经全部释放,等待父进程查看并释放PCB资源

-TASK-INTERUPTABLE(S):可中断睡眠,可接受信号退出睡眠状态,

-TASK-UNITERUPTABLE(D):不可中断睡眠,不接受信号

2 什么是作业

作业是linux中为了方便交互式shell管理前台进程和后台进程而生成的概念,包含一到多个进程,由管道符和命令共同组成

案例:cat /etc/passwd | grep mysql

前台程序:可以霸占终端的交互,接受信号

后台程序:不可以享受到与终端的交互,不能接受来自终端的信号,但可以输出到终端

一个终端会话只能有一个前台作业和多个后台作业

前台作业比如说是shell程序或者正在shell中运行的程序

后台作业就是同样依赖终端,但不在前台显示的一系列程序

运行后台的作业方式就是在命令后面加上一个&号

案例:cat /etc/passwd &

-查看所有后台作业:jobs -l  (查看所有后台作业和UID)

-将后台作业放在前台运行:fg %number

-暂停前台作业,并把它放在后台上:ctrl + Z

-继续执行后台作业:bg %number

备注:+符号表示当前默认作业,-符号表示下一个成为默认作业的进程,没有%number时就会选择默认作业

所有后台作业只有三种状态:running,stopped,complete

3:如何传递信号

信号是一种传递给进程的软件中断,可以通过外部错误,显示命令输入,和终端输入来传递信号

信号的种类和作用如下:

如何显式发送信号

-使用kill命令

kill 命令的基本语法如下:

kill [选项] <进程ID> [进程ID...]

最常用的选项

无选项:默认发送 SIGTERM(终止信号)。

kill <PID>

这会向指定的进程发送 SIGTERM 信号,请求进程终止。

-9:发送 SIGKILL 信号,强制终止进程。

kill -9 <PID>

SIGKILL 信号不能被进程捕获或忽略,因此可以强制终止进程。

-15:显式发送 SIGTERM 信号(与默认行为相同)。

kill -15 <PID>

-1:发送 SIGHUP 信号,常用于重新加载配置文件。

kill -1 <PID>

-2:发送 SIGINT 信号,类似于按下 Ctrl+C。

kill -2 <PID>

-0:检查进程是否存在,但不发送信号。

bash

复制

kill -0 <PID>

如果进程存在,返回状态码为 0;否则返回非零值。

发送信号给作业

除了通过进程ID(PID)发送信号,kill 命令还可以通过作业编号(Job ID)发送信号。作业编号可以通过 jobs 命令查看。

发送信号给作业:

kill %<JobID>

例如:

kill %1

这会向作业编号为 1 的后台作业发送 SIGTERM 信号。

强制终止作业:

kill -9 %1

备注:kill -l可以列出所有的信号

-使用pkill(process kill)命令

作用;选择符合条件(包括用户,组,命令名称,时间线,终端,会话)的进程发送信号

案例:终止后台作业

Pgrep(process grep)可以筛选出符合条件的进程信息

案例:查看出kiosk用户的所有进程

命令:pgrep -l -u kiosk

4:如何监控进程活动

在 Linux 系统中,负载平均值(Load Average) 是衡量系统当前负载的一个重要指标。它反映了系统中等待运行的进程数量,通常用于评估系统的繁忙程度和性能状态。负载平均值通常显示为三个数字,分别表示过去1分钟、5分钟和15分钟内的平均负载。

1. 负载平均值的含义

负载平均值表示系统中等待运行的进程数量,包括等待 CPU 时间的进程(R)和正在网络或者磁盘IO的进程数(D)。它是一个无单位的数值,通常用来衡量系统的负载情况:

数值小于1:表示系统中的 CPU 大部分时间是空闲的。

数值等于1:表示系统中的 CPU 刚好被充分利用。

数值大于1:表示系统中的 CPU 负载较高,有多个进程在等待 CPU 时间。

备注:要关注系统的逻辑cpu数量

  1. 可以使用top命令来监控进程信息

top 是一个非常强大的实时系统监控工具,用于显示当前系统中占用资源最多的进程和系统资源的使用情况。它提供了关于CPU、内存、交换空间、I/O 等的详细信息,并且可以动态更新(3秒刷新一次),方便用户实时监控系统的性能。

Top命令的输出分为两部分

第一部分:系统主要情况摘要

包含了以下信息

  1. 当前系统时间
  2. 用户数
  3. 负载平均值
  4. 总进程数和不同状态的进程数
  5. %us:用户态 CPU 使用率(用户进程占用 CPU 的时间百分比)。
  6. %sy:内核态 CPU 使用率(内核进程占用 CPU 的时间百分比)。
  7. %ni:用户态进程的nice值(优先级调整)占用的 CPU 时间百分比。
  8. %id:CPU 空闲时间百分比。
  9. %wa:CPU 等待 I/O 操作的时间百分比。
  10. %hi:硬件中断占用的 CPU 时间百分比。
  11. %si:软件中断占用的 CPU 时间百分比。
  12. %st:CPU 被虚拟机偷走的时间百分比(仅在虚拟化环境中显示)。
  13. 内存总量和空闲,缓存和已使用量
  14. 交换空间总量和空闲的,已使用的交换空间

第二部分:进程表

进程列表显示在 top 窗口的下半部分,列出了当前系统中占用资源最多的进程。默认情况下,进程按 CPU 使用率排序,但可以通过交互式命令更改排序方式。

包含了以下信息

top 命令提供了丰富的交互式指令,允许用户在运行时动态调整显示内容、排序方式、过滤进程等。以下是一些常用的交互式指令:

1. 帮助

h 或 ?:显示帮助信息,列出所有可用的交互式命令。

2. 刷新频率

s:设置刷新间隔时间。按下后输入新的时间间隔(单位为秒或毫秒)。

3. 排序

o 或 O:按指定列排序(如按 CPU 使用率、内存使用率等)。

P:按 CPU 使用率(%CPU)降序排序。

M:按内存使用率(%MEM)降序排序。

T:按运行时间(TIME+)降序排序。

4. 进程管理

k:杀死进程。按下后输入进程的 PID 和要发送的信号(默认为 SIGTERM)。

r:调整进程的优先级(nice 值)。按下后输入进程的 PID 和新的 nice 值。

5. 显示选项

f 或 F:进入字段选择模式,允许用户选择或隐藏某些列。

a:切换显示所有进程(包括僵尸进程)。

i:切换显示进程的交互模式,忽略僵尸进程。

n 或 #:设置显示的进程数量。

6. 过滤和高亮

u:按用户过滤进程。按下后输入用户名或用户ID,仅显示该用户拥有的进程。

p:按进程ID过滤进程。按下后输入进程ID,仅显示指定的进程。

H:切换显示线程。默认情况下,top 显示进程,但可以通过此选项切换到线程视图。

l:切换显示负载平均值和系统摘要信息。

m:切换显示内存信息。

t:切换显示任务(进程)摘要信息。

c:切换显示完整的命令行(默认显示进程名)。

7. 其他

q:退出 top。

< 或 >:在字段选择模式中,移动光标到上一个或下一个字段。

+ 或 -:在字段选择模式中,增加或减少字段的显示顺序。

能坚持看到这里真是不容易啊,不仅你在记忆复苏的道路上迈出了一大步,你更是在意志上领先了很多人,你现想必已经基本掌握了关于监控进程的相关信息,恭喜你,假以时日你必会重登巅峰的,相信你自己,少年(另外求求赞,收个藏啥的,还可以成为我的粉丝)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐