Bootstrap

深入解析Linux 进程管理机制(超详细)

 文字有点多需要理解

目录

一.进程管理

1.进程简介

2.静态进程

​编辑 ​编辑

3.动态进程

top数据列解释

4.结束进程

5.工作管理命令

6.定时任务


一.进程管理

1.进程简介

1)什么是进程:

进程是运行在linux中的程序的一个实例,是管理事务的基本单元;进程拥有自己独立的处理环境和系统资源。进程的状态是变化的,其包括进程的创建、调度和消亡。

2)什么是生命周期:

生命周期通常从安装开始,到最终被用户卸载结束。在这个过程中,它会经历不同的阶段,包括引导、运行、维护和再次引导。

3)什么是进程状态:

进程状态主要指的是进程在不同时刻所处的工作状态↓

  • 运行态:‌进程正在CPU上执行。‌
  • 就绪态:‌进程已经准备好,‌等待CPU分配时间片以执行。‌
  • 阻塞态:‌进程由于等待某些条件(‌如I/O操作完成)‌而暂停执行。‌
  • 新建态:‌进程刚刚被创建,‌但还未开始执行。‌
  • 终止态:‌进程执行完毕或因错误而终止,‌等待系统回收资源。‌
  • 睡眠态(‌S状态)‌:‌进程因等待某些条件满足而被挂起。‌
  • 磁盘睡眠态(‌D状态)‌:‌进程在等待磁盘操作完成时所处的状态。‌
  • 停止态(‌T状态)‌:‌通过某些信号或操作使进程暂停执行。‌
  • 暂停态(‌Z状态)‌:‌进程被暂停,‌通常用于调试或特殊需要。‌
  • 僵尸态(‌Z状态)‌:‌当进程终止后,‌如果其父进程没有正确回收该进程的资源,‌该进程就会进入僵尸态,‌等待操作系统或其父进程来处理。‌

2.静态进程

1)静态查看进程

 语法: ps [选项]

  ps -aux 查询所有进程信息 查看 CPU 内存占用率

​编辑

选项说明:

a (all):显示现行终端机下的所有程序

u (user):以用户为主的格式来显示程序状况

x:列出当前用户正在运行的进程,而不仅限于在终端中执行的进程

进程字段含义:

USER:运行进程的用户 ;

PID:进程ID (唯一,管理员可通过进程 ID 结束进程);

%CPU:占用cpu ;

%MEM:占用内存 ;

TTY:进程运行的终端 ;

STAT:进程状态 ;

START:进程启动的时间 ;

TIME:进程占用 CPU 的时间 ;

COMMAND:进程文件、进程名 ;

2)进程排序

语法:ps -aux --sort  列名

以CPU占比排列(减号表示降序排列)

ps -aux --sort  %cpu

ps -aux --sort -%cpu

​编辑

3)自定义显示字段数

语法:ps -axo  字段名

​编辑

4)显示进程信息,并包含进程关联的父进程 (如果有程序无法结束运行,可以结束它的父进程从而结束该进程)

语法:ps -ef

-e:等价于 ‘-A’ ,表示列出全部的进程
-f:显示全部的列(显示全字段)

​编辑

PID:程序号

PPID:父系程序号

5)进程树状图查看

使用pstree命令来查看进程树状图。这个命令会显示当前运行的进程树,以及它们之间的父子关系。

语法:pstree [选项]

 -p    进程号
 -u    进程用户名

​编辑

3.动态进程

1)实时监控进程

语法: top  [选项]
 -d 秒          刷新频率
 -i                只显示活动进程
 -p               进程ID   通过指定ID 监控进程状态
 -n               循环次数

​编辑

了解哟波(

top - 00:10:28 up 1:22, 3 user, load average: 0.02, 0.04, 0.05

top: 这是命令本身,表示正在查看系统的实时状态。
00:10:28: 当前系统时间
up 1:22: 表示系统最后一次启动后总的运行时间。
3 user: 有 3 个用户当前登录系统。
load average: 0.02, 0.04, 0.05: 这表示系统的平均负载。三个数字分别代表最后 1分钟、5 分钟和 15 分钟的平均负载。负载是系统中等待运行的任务数量。

Tasks: 222 total, 1 running, 221 sleeping, 0 stopped, 0 zombie

1 total: 系统总共有 1 个进程。
1 running: 有1进程正在运行。
221 sleeping: 有 221 个进程在休眠状态。
0 stopped: 没有进程被停止。
0 zombie: 没有僵尸进程。僵尸进程是已完成但其父进程还未收回其资源的进程。

%Cpu(s): 0.1 us, 0.7 sy, 0.0 ni, 99.1 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st

这部分描述了 CPU 的使用情况。其中:
us: user space,用户空间占用的 CPU 时间百分比。
sy: system space,内核空间占用的 CPU 时间百分比。
ni: nice value,改变过优先级的进程占用的 CPU 时间百分比。
id: idle,空闲的 CPU 时间百分比。
wa: wait,等待 I/O 的 CPU 时间百分比。
hi: hardware interrupt,硬件中断占用的 CPU 时间百分比。
si: software interrupt,软件中断占用的 CPU 时间百分比。
st: steal time,虚拟环境中被其他虚拟机占用的 CPU 时间百分比。

MiB Mem : 4026160  total, 2316900  free, 911544  used, 797716 buff/cache

这描述了系统的内存使用情况。
4026160  total: 总内存为 4026160  MiB。
2316900  free: 空闲的内存为 2316900  MiB。
911544  used: 被使用的内存为 911544  MiB。
797716buff/cache: 被缓冲和缓存的内存为 797716MiB。这部分内存是为了提高文件访问速度而被系统用作缓存的内存。

 MiB Swap: 4194300  total, 4194300  free, 0 used. 2846388 avail Mem

这描述了交换空间的使用情况(在物理内存不足时,系统会使用硬盘作为额外的内存,称为交换空间)。
0.0 total: 总交换空间为 0 MiB。这意味着你的系统没有配置交换分区或交换文件。在现代系统中,这通常是正常的,因为现代系统通常使用虚拟内存管理来管理内存和硬盘之间的空间分配,而不需要显式的交换分区或交换文件。
2846388avail Mem: 可用的物理内存是 2846388MiB(包括缓冲和缓存)。这部分内存可用于满足新的内存需求,而不必使用交换空间。

top数据列解释

​编辑

1.PID:       进程ID,唯一标识一个进程的编号。

2.USER:   进程所有者的用户名。

3.PR:        进程的优先级。

4.NI:          nice值,用于调整进程的优先级。默认值是0,范围是-20到19。

5.VIRT:      进程使用的虚拟内存总量,单位是KB。

6.RES:      进程当前使用的、驻留在物理内存中的大小,单位是KB。

7.SHR:      共享内存大小,单位是KB。

8.S:           进程的状态。常见的状态有R(运行中)、S(休眠)、Z(僵尸进程)等。

9.%CPU:   该进程占用的CPU使用率。

10.%MEM:该进程占用的物理内存使用率。

11.TIME+: 该进程启动后总共运行的时间,单位是分钟:秒。

12.COMMAND: 启动进程的命令名称或命令行。

4.结束进程

  1. 使用kill命令:

kill [进程ID]

如果进程不响应,可以使用-9选项强制结束:

kill -9 [进程ID]

  1. 使用pkillkillall命令通过进程名称结束进程:

pkill [进程名称]

killall [进程名称]

  1. 如果你需要结束一个子进程,可以使用pgrep来查找进程ID,然后用killpkill结束它:

pgrep -f [子进程名称]

kill [返回的进程ID]

  1. 使用xkill命令来结束图形界面程序:

首先运行xkill,然后点击你想要结束的程序的窗口,它会发送SIGTERM信号。

  1. 如果你需要结束一个会话中的所有进程,可以使用kill命令加上-HUP选项:

kill -HUP [会话ID]

5.工作管理命令

 &把进程放入后台      
 jobs -l        显示后台工作程序
 fg %工作号    将后台暂停的工作恢复到前台执行
 bg %工作号         后台恢复执行的命令

6.定时任务

查看crontab服务状态:systemctl  status crond

​编辑

开启定时服务:   systemctl restart crond

语法: crontab [选项]

crontab -e         进入crontab编辑界面。会打开vim编辑

-e    编辑crontab定时任务
-l     查询crontab任务
-r     删除当前用户所有的crontab任务

* * * * *(星之间有空格)

没颗星星的顺序:分 时 日 月 周

  • 分钟,可以是从0到59之间的任何整数。
  • 小时,可以是从0到23之间的任何整数。
  • 日期,可以是从1到31之间的任何整数。
  • 月份,可以是从1到12之间的任何整数。
  • 星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • (*):代表所有可能的值,例如月份字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • (,):可以用逗号隔开的值指定一个列表范围
  • (-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • (/):可以用正斜线指定时间的间隔频率,正斜线可以和星号一起使用,例如*/10,如果用在分钟字段,表示每十分钟执行一次也可以与其他符号配用

示例:*/1 * * * * echo "hello" >> file1        每隔1分钟,向/root/file1.txt文件中添加hello文字

45 22 * * *         每天22点45分执行命令

40 4 * * 1-5       每周一到周五的凌晨4点40分执行命令

0 5 1,15 *          每月1号和15号的凌晨5点0分执行命令

;