系列文章目录
` 提示:仅用于个人学习,进行查漏补缺使用。
1.Linux介绍、目录结构、文件基本属性、Shell
2.Linux常用命令
3.Linux文件管理
4.Linux 命令安装(rpm、install)
5.Linux账号管理
6.Linux文件/目录权限管理
7.Linux磁盘管理/文件系统
8.Linux逻辑卷管理LVM
9.Linux磁盘配额
10.Linux服务器硬件及RAID配置实验
11.Linuxu引导过程与服务控制
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本章大概内容有:
查看进程、ps命令、top命令、pgrep、jobs、进程的前后台调度、进程的启动方式、pstree命令、终止进程的运行、计划任务管理crontab命令以及补充的僵尸/孤儿进程等
提示:以下是本篇文章正文内容,下面案例可供参考
1.查看进程
- 注:查询指令的选择很关键-场景 (要求:适合、合理、精炼、高效)
- 程序与进程的关系
- 程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
- 进程
- 在CPU及内存中运行的程序代码
- 动态执行的diamagnetic
- 父、子进程
- 每个程序可以创建一个或多个进程
- 程序
2.ps【process status】命令—查看静态的进程统计信息
- **ps -aux **
ps -aux ###查看所有进程(包括其他用户的进程)、显示进程的用户和内存使用情况并显示所有终端的进程。
选项 | 描述 | ps 命令示例 |
---|---|---|
a | 显示现行终端下的所有进程,包括其他用户的进程。 | ps -a |
u | 显示进程的归属用户及其内存的使用情况。 | ps -u |
x | 显示所有终端的进程。 | ps -x |
h | 不显示标题列。 | ps -h |
e | 查看所有进程的详细信息 | ps -e |
f | 以全格式显示进程信息 | ps -f |
- 各列的解释:
列名 | 解释 |
---|---|
USER | 进程的用户 |
PID | 进程的ID |
%CPU | 进程占用的CPU百分比 |
%MEM | 占用内存的百分比 |
VSZ | 该进程使用的虚拟内存量(KB) |
RSS | 该进程占用的实际物理内存量(KB) |
TTY | 启动进程的终端名 |
STAT | 该进程的状态( D:不可中断的休眠状态; R:正在运行状态; S:处于休眠状态,可被唤醒; T:停止状态,可能是在后台暂停或进程处于跟踪调试状态; Z:僵尸进程,进程已经中止,但是部分程序还在内存当中) |
START | 该进程被启动时间 |
TIME | 该进程实际使用CPU的时间 |
COMMAND | 进程的名称与参数 |
- ps -elf
ps -elf ###显示当前系统中的所有进程的详细信息。
选项 | 含义 |
---|---|
-e | 显示系统内的所有进程信息。 |
-l | 使用长格式显示进程信息。 |
-f | 使用完整的格式显示进程信息。 |
-a | 显示现行终端下的所有进程。 |
-T | 查看线程信息。 |
-C <进程名称> | 显示指定进程名的信息。 |
-p <进程pid> | 显示指定pid的进程的信息。 |
-H | 显示树状结构,表示进程间的相互关系。 |
--no-headers | 不显示标题列。 |
- 各列的解释:
列名 | 含义 |
---|---|
F | 内核分配给进程的系统标记。 |
S | 进程的状态。 |
UID | 启动这些进程的用户。 |
PID | 进程的进程ID。 |
PPID | 父进程的进程号(如果该进程是由另一个进程启动的)。 |
C | 进程生命周期中的CPU利用率。 |
PRI | 进程的优先级(越大的数字代表越低的优先级)。 |
NI | 谦让度值用来参与决定优先级。 |
ADDR | 进程的内存地址。 |
SZ | 假如进程被换出,所需交换空间的大致大小。 【进程的虚拟内存大小,包括代码、数据和堆栈等所有内存空间。它并不反映物理内存的实际使用量,而是进程请求分配的总虚拟内存空间】 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名。 |
STIME | 进程启动时的系统时间。 |
TTY 表示一个终端(PTS/1) | 进程启动时的终端设备。 |
TIME | 运行进程需要的累计CPU时间。 |
CMD | 进程的启动命令。 |
3.top命令 ----查看进程动态信息
- 第一行是 任务队列信息
top - 11:48:41 up 4:41, 1 user, load average: 0.02, 0.02, 0.05
列名 | 含义 |
---|---|
11:48:41 | 系统时间 |
up 4:41 | 系统已运行时长,格式通常为“up 时间”,其中“时间”是自系统启动以来的运行时间 |
1 user | 当前登录用户数 |
load average: 0.02, 0.02, 0.45 | 系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值 |
- 第二行 为 进程信息
Tasks: 229 total, 1 running, 228 sleeping, 0 stopped, 0 zombie
列名 | 含义 |
---|---|
Tasks | 总进程数,即系统中当前存在的进程总数。 |
running | 正在运行的进程数,即当前正在使用CPU的进程数。 |
sleeping | 休眠的进程数,即当前处于等待状态的进程数。 |
stopped | 中止的进程数,即当前被暂停或停止的进程数。 |
zombie | 僵死的进程数,即已经结束但未正确回收的进程数。 |
- 第三行 为 CPU的信息
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
列名 | 含义 |
---|---|
us | 用户占用,即CPU时间用于用户空间进程的比例。 |
sy | 内核占用,即CPU时间用于内核进程的比例。 |
ni | 优先级调度占用,即CPU时间用于有较高优先级的进程的比例。 |
id | 空闲CPU,表示CPU处于空闲状态的时间比例。要了解空闲CPU的百分比,主要看%id部分 |
wa | I/O 等待占用,即CPU时间用于等待I/O操作完成的比例。 |
hi | 硬件中断占用,即CPU时间用于处理硬件中断的比例。 |
si | 软件中断占用,即CPU时间用于处理软件中断的比例。 |
st | 虚拟化占用,即CPU时间用于虚拟化操作的比例。 |
- 第四行 为 内存的信息
KiB Mem : 16247816 total, 15207592 free, 557944 used, 482280 buff/cache
列名 | 含义 |
---|---|
total | 总内存空间,即系统拥有的所有内存总量。 |
free | 空闲内存,即当前未分配给任何进程的内存量。 |
used | 已用内存,即已经被分配给进程的内存量。 |
buff/cache | 物理内存和交换内存的缓冲区总和,这部分内存用于提高系统性能,存储临时数据。 |
- 第五行 为 交换空间的信息
KiB Swap: 8257532 total, 8257532 free, 0 used. 15313624 avail Mem
列名 | 含义 |
---|---|
total | 总交换空间,即系统配置的交换空间总量。 |
free | 空闲交换空间,即当前未使用的交换空间量。 |
used | 已用交换空间,即已经被分配用于交换的空间量。 |
avail Mem | 可用物理空间,通常指的是空闲物理内存量。 |
- 进程信息区各列解释:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9547 root 20 0 320216 6872 5376 S 0.3 0.0 0:57.48 vmtoolsd
1 root 20 0 128696 7332 4204 S 0.0 0.0 0:07.41 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.11 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.13 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.56 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:18.15 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
...
...
列名 | 含义 |
---|---|
PID | 进程ID,唯一标识一个进程。 |
USER | 进程所有者的用户名。 |
PR | 优先级,进程调度时的一个重要参数。 |
NI | 谦让度值,影响进程的优先级。 |
VIRT | 进程使用的虚拟内存总量,单位为kb。 |
RES | 进程使用的物理内存大小,单位为kb。 |
SHR | 共享内存大小,单位为kb。 |
S | 进程状态,如运行®、休眠(S)、停止(T)等。 |
%CPU | 进程上次更新到现在的CPU时间占用百分比。 |
%MEM | 进程使用的物理内存百分比。 |
TIME+ | 进程使用的CPU时间总计,单位为1/100秒。 |
COMMAND | 命令名或命令行,即启动进程的命令。 |
- top常用命令:
命令键 | 功能描述 |
---|---|
P 键 | 根据CPU使用百分比大小进行排序 |
M 键 | 根据驻留内存大小进行排序 |
N 键 | 根据启动时间进行排序 |
c 键 | 切换显示命令名称和完整命令行 |
h 键 | 获得top程序的在线帮助信息 |
k 键 | 终止指定进程(输入PID后按Enter键) |
q 键 | 退出top程序 |
数字1 键 | 显示CPU个数和状态 |
- 以下是 top 的进阶使用选项:
| 命令 | 功能描述 |
| — | — |
| top -H | 显示所有线程 |
| top -H -p | 显示特定进程中的线程 |
PS: 表格中 “命令键” 列列出的是在 top 程序运行时可以的键,而 “命令” 列列出的是启动 top 程序时可以使用的命令行选项。
4.查看进程信息 pgrep
- **作用:**根据给定条件搜索正在运行的进程(ID)。【pgrep bash:找名为 “bash” 的进程ID】
- 常用选项
选项 | 长选项 | 描述 |
---|---|---|
-a | 显示进程名和PID | |
-c | 仅显示匹配进程的数量,而不显示进程名和PID | |
-d | --delimiter | 指定输出进程ID之间的分隔符 |
-f | --full | 全名匹配,只匹配完整的进程名称 |
-g | --group | 只匹配属于特定组的进程 |
-l | --list-full | 列出全部匹配的进程名称和ID |
-o | --only | 只输出进程ID |
-P | --parent | 只匹配指定父进程ID的进程 |
-s | --signal | 发送信号到匹配的进程 |
-v | --invert | 反选,匹配不包含给定模式的进程 |
-x | --exact | 精确匹配进程名称 |
-i | 查看进程不区分大小写 |
5.jobs命令—显示当前 shell 会话中的作业列表及其状态,列出后台进程的状态信息
选项 | 描述 |
---|---|
-l | 显示作业的详细列表,包括作业号、进程号、当前状态以及作业的命令行。 |
-n | 只显示自上次通知以来状态改变的作业。 |
-p | 只显示作业的进程号。 |
-r | 只显示当前正在运行的作业。 |
-s | 只显示已停止的作业。 |
6.进程的前后台调度
vim 111 #打开文件111并进行编辑
Ctrl+z #将当前正在编辑的vim进程挂起到后台
vim 222 #再次打开另一个文件222进行编辑
Ctrl+z #再次将当前正在编辑的vim进程挂起到后台
jobs -l #列出当前shell会话中所有作业的详细列表
pgrep -l "vim" #查找所有名为"vim"的进程,并列出它们的进程ID和命令行
killall -9 vim ###强制杀死进程,默认为 kill -15 ;格式: kill -9 10035 [10035为进程号]
7.pstree命令—查看进程树
-
pstree命令 以树状图的形式显示当前系统中的进程及其关系。
| 选项 | 描述 |
| — | — |
|-a
| 显示进程的完整命令行。 |
|-c
| 不使用精简格式的树状图。 |
|-h
| 特别标明当前的进程。 |
|-l
| 使用长列表格式。 |
|-n
| 按进程ID排序输出。 |
|-p
| 显示进程的PID。 |
|-t
| 以文本方式显示,不画线。 |
|-u
| 显示进程的所有者。 |
|-V
| 显示pstree
的版本。 | -
PS : tree 以树状结构的方式列出目录内容
8.进程的启动方式
- 手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号
- 调度启动
- 使用**at**命令,设置一次性计划任务【用于在指定的时间执行任务。实现自动化任务的有力工具,类似于Windows系统中的计划任务。】
- 使用**crontab**命令,设置周期性计划任务
9.进程的前后台调度
- Ctrl+Z组合键
- 将当前进程挂起,即调入后台并停止执行
- jobs命令
- jobs 【-l】
- 查看处于后台的任务列表
- fg命令
- 将后台进程恢复到前台运行,可指定任务序号
10.终止进程的运行
- Ctrl+C组合键
- 中断正在执行的命令
- kill 、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称相关的所有进程
- -9选项用于强制终止
- pkill命令
- 根据特定条件终止相应的进程
- 常用命令选项
- -U : 根据进程所属的用户名终止相应进程
- -t : 根据进程所在的终端终止相应进程
- 例如:
pkill -9 -U "teacher" ###发送 SIGKILL 信号到所有用户为 "teacher" 的进程。
11.计划任务管理—crontab命令
- 按照预先设置的时间周期(分钟、小时、天、月、周)重复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件
- 全局设置文件,位于文件: /etc/crontab
- 系统默认的设置,位于目录: /etc/cron.*/
- 用户定义的设置,位于文件: /var/spool/cron/ 用户名
- 管理crontab计划任务
- 编辑计划任务
crontab -e [-u 用户名] ### -u缺省时默认是针对当前用户 -e:编辑 crontab 文件
- 查看计划任务
crontab -l [-u 用户名] ### 展示当前设定的实时任务
- 删除计划任务
crontab -r [-u 用户名] ### 删除所有定时任务 --- 使用的时候慎重
- crontab任务配置的格式
字段 | 取值范围 |
---|---|
分钟 | 0-59 |
小时 | 0-23 |
日期 | 1-31 |
月份 | 1-12 |
星期 | 0-7 |
命令 | 要执行的命令或程序脚本 |
- **时间数值的特殊表示方法 **
-
- 表示该范围内的任意时间
- ,表示间隔的多个不连续时间点
-
- 表示一个连续的时间范围
- / 表示指定间隔的时间频率
-
- 应用示例
- 0 17 * * 1-5 周一到周五每天17:00
- 30 8 * * 1,3.5 每周一、三、五的8点30分
- 0 8-18/2 * * * 8点到18点之间每2小时
- 0 * * /3 * * 每3天
12.补充
12.1
ps -aux
(使用 BSD 语法):
a
:显示所有用户(包括其他用户和root)的进程。u
:显示进程的详细信息,包括进程的所有者(用户名)、CPU 时间、内存使用情况等。x
:显示没有控制终端的进程。
ps -aux
的输出通常包括以下列:
USER
:进程所有者(用户名)。PID
:进程ID。%CPU
:进程占用的CPU时间的百分比。%MEM
:进程占用的物理内存的百分比。VSZ
:进程使用的虚拟大小(以KB为单位)。RSS
:进程使用的常驻大小(以KB为单位)。TTY
:进程启动的终端名称(如果进程没有终端,则显示为?
)。STAT
:进程状态。START
:进程启动时间。TIME
:进程使用的CPU时间总计。COMMAND
:启动进程的命令行。
ps -elf
(使用 System V 语法):
e
:显示所有用户的进程。l
:以长格式显示详细信息。f
:以完全格式显示详细信息。
ps -elf
的输出通常包括以下列:
UID
:进程所有者的用户ID。PID
:进程ID。PPID
:父进程ID。C
:进程占用的CPU时间的百分比。STIME
:进程启动的时间。TTY
:进程启动的终端名称(如果进程没有终端,则显示为?
)。TIME
:进程使用的CPU时间总计。CMD
:启动进程的命令行。
12.2
在top
命令的输出中,进程的状态(state)显示了进程当前的活动情况。关于僵尸和孤儿进程,这里做一些解释:
- 僵尸进程(Zombie):这是已经结束(终止)但仍然在进程表中占据一个位置的进程。它没有父进程来接收其退出状态,因此不能被操作系统回收。僵尸进程的状态显示为"Z"。
- 孤儿进程(Orphan):这是父进程已经终止,但是子进程仍在运行的进程。由于父进程已经结束,所以这些子进程就没有了父进程来接收它们的标准输出和错误输出。孤儿进程的状态显示为"O"。
在top
命令的实时输出中,您可以看到所有进程的状态,包括僵尸和孤儿进程。例如:
top - 15:23:57 up 1:15, 1 user, load average: 0.27, 0.24, 0.21
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie, 0 stopped, 0 tasks
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2048000 total, 983000 free, 384000 used, 680000 buff/cache
KiB Swap: 1024000 total, 1000000 free, 24000 used. 1600000 avail Mem
在这个输出中,并没有显示僵尸或孤儿进程的状态,这可能是因为系统中当前没有这样的进程,或者top
命令的显示过滤了这些状态。通常,这些状态会在进程列表的底部以注释的形式显示。如果您想查看更多关于进程状态的信息,可以使用top
命令的附加选项,例如-o
选项,来指定以特定的顺序显示进程状态。
在Linux系统中,僵尸进程和孤儿进程是两种常见的进程状态,它们通常不会对系统造成严重的影响,但如果数量过多,可能会消耗系统资源并导致内存泄漏。以下是处理这两种进程的一般方法:
僵尸进程
僵尸进程是指已经结束但仍然在进程表中占据位置的进程。它们不占用任何系统资源,除非它们的父进程从未读取过它们的退出状态,导致它们无法被操作系统回收。
- 查找僵尸进程:使用
ps aux | grep 'Z'
或pgrep -lZ'
命令来查找所有的僵尸进程。 - 杀死僵尸进程:直接使用
kill
命令加上僵尸进程的PID来杀死它们。例如:kill -9 <僵尸进程PID>
。但这并不是一个好方法,因为它不会清除僵尸进程的状态,除非父进程也跟着结束。 - 等待父进程结束:如果可能的话,等待僵尸进程的父进程结束,这样僵尸进程就会被操作系统自动回收。
- 使用
exec
:在某些情况下,可以使用exec
命令替换掉原来的程序,这样原来的进程就会结束,并且其状态会被回收。 - 检查父进程:如果僵尸进程的数量持续增加,可能需要检查父进程是否存在问题,例如是否有未捕获的信号或异常行为。
孤儿进程
孤儿进程是指父进程结束但子进程仍在运行的进程。这些进程会被init进程(PID为1)接管。
- 查找孤儿进程:使用
ps aux | grep 'O'
或pgrep -lO
命令来查找所有的孤儿进程。 - 等待init进程回收:通常,孤儿进程会被init进程自动回收,因此不需要手动干预。
- 检查孤儿进程:如果孤儿进程没有被init进程回收,可能需要检查系统是否存在问题,或者孤儿进程是否应该被保留。
在处理僵尸进程和孤儿进程时,最重要的是先确定它们出现的原因,然后采取适当的措施。如果问题持续存在,可能需要更深入地调查系统的配置和程序的行为。此外,保持系统的定期维护和更新,以及使用监控工具来跟踪进程状态,可以帮助预防这类问题的发生。