文章目录
本篇对一些深层的进程管理命令和计划任务管理命令讲解。熟练灵活使用这些命令可以帮助我们高效管理Linux系统。
1查看静态的进程统计信息-ps
1. ps aux
功能:列出系统中所有用户的所有进程,包括没有控制终端的进程。
注意:没有横杠“-”
命令
ps aux
常用选项
- a:显示现行终端下的所有进程,包括其它用户的进程。
- u:显示进程的归属用户及资源等的使用情况。
- x:显示所有进程,包括没有控制终端的进程。
- h:不显示标题列。在需要更紧凑输出的情况下有用。
输出示例
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128560 7288 ? Ss 08:12 0:02 /usr/lib/sy
root 2 0.0 0.0 0 0 ? S 08:12 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 08:12 0:00 [kworker/0:
各列的解释
- USER:进程的用户。
- PID:进程的ID。
- %CPU:进程占用的CPU百分比。
- %MEM:占用内存的百分比。
- VSZ:该进程使用的虚拟内存量(KB)。
- RSS:该进程占用的物理内存量(KB)。
- TTY:启动进程的终端名。不是从终端启动的进程则显示为:?
- STAT:该行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
当中)。 - START:该进程被触发启动时间。
- TIME:该进程实际使用CPU运行的时间。(大部分运行时间快所以显示0:00)
- COMMAND:进程的启动命令(名称与参数)。
2. ps -elf
功能:以长格式列出系统中所有进程的详细信息。
注意:有横杠“-”
命令
ps -elf
常用选项
- -e:显示系统内的所有进程信息。
- -l:使用长格式显示进程信息。
- -f:使用完整的格式显示进程信息。
其他选项
- -a:显示现行终端下的所有进程。
- -T:查看线程信息。
- -C <进程名称>:显示指定进程名的信息。
- -p <进程pid>:显示指定pid的进程的信息。
- -H:显示树状结构,表示进程间的相互关系。
- –no-headers:不显示标题列。
输出示例
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32140 ep_pol 08:12 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 08:12 ? 00:00:00 [kthreadd]
各列的解释
- F:内核分配给进程的系统标记。
- S:进程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
止状态,可能是在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存
当中)。 - UID:启动这些进程的用户。
- PID:进程的进程ID。(0为没有父进程)
- PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
- C:进程生命周期中的CPU利用率。
- PRI:进程的优先级(越大的数字代表越低的优先级)。
- NI:谦让度值用来参与决定优先级。
- ADDR:进程的内存地址。
- SZ:假如进程被换出,所需交换空间的大致大小。表示进程当前占用的虚拟内存大小。
- WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
- STIME:进程启动时的系统时间。
- TTY:进程启动时的终端设备。(拓展:表示一个终端PTS/1)
- TIME:运行进程需要的累计CPU时间。
- CMD:进程的启动命令。
2查看动态的进程统计信息-top
是一个用于实时监控系统运行状态的工具,主要用于查看系统中正在运行的进程和系统资源的使用情况。提供了动态的、实时更新的系统状态视图,包括 CPU、内存、交换空间、进程等信息。
特点
- 可以显示系统中所有进程的信息,包括 CPU 和内存使用情况。
- 提供了一个交互式的界面,可以对进程进行排序、筛选和操作。
格式
top [选项
常用选项
- -d <时间>:设置更新间隔时间,单位为秒。如:-d 5 每 5 秒刷新一次。
- -n <次数>:设置更新次数。如:-n 10 只显示 10 次更新。
- -b:以批处理模式运行,适合将输出重定向到文件。
- -u <用户>:仅显示指定用户的进程。
- -p :仅显示指定 PID 的进程。
- -H:显示所有线程
- -H -p :显示特定进程中的线程
示例
-
显示系统状态
启动
top
命令并显示系统的实时进程列表和资源使用情况。top
-
每 5 秒刷新一次
设置
top
每 5 秒刷新一次显示内容。top -d 5
-
仅显示指定用户的进程
显示指定用户的所有进程。
top -u username
-
以批处理模式输出
这会以批处理模式运行
top
并将输出保存到top_output.txt
文件中,-n 1
表示只显示一次。top -b -n 1 > top_output.txt
直接输入top的输出示例
top - 11:43:32 up 3:31, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863028 total, 908312 free, 517828 used, 436888 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1169832 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31676 root 20 0 162200 2368 1580 R 0.7 0.1 0:00.06 top
491 root 20 0 0 0 0 S 0.3 0.0 0:18.39 xfsail+
978 root 20 0 295564 5308 4036 S 0.3 0.3 0:54.27 vmtool+
行的解释
第一行 - 任务队列信息
11:06:48 | 系统时间 |
---|---|
up 1:22 | 系统已运行时长 |
1 user | 当前登录用户数 |
load average: 0.06, 0.60, 0.48 | 系统负载 |
注:1. 系统处理的任务数,分别为1分钟、5分钟、15分钟前的平均值 2.禁止登录的看不到,如(/sbin/nologin)
第二行 - 进程信息
Tasks | 总进程数 |
---|---|
running | 正在运行的进程数 |
sleeping | 休眠的进程数 |
stopped | 中止的进程数 |
zombie | 僵死的进程数 |
第三行 - CPU的信息
us | 用户占用 |
---|---|
sy | 内核占用 |
ni | 优先级调度占用 |
id | 空闲CPU |
wa | I/O 等待占用 |
hi | 硬件中断占用 |
si | 软件中断占用 |
st | 虚拟化占用 |
注:I/O速度大,CPU空闲率低意味着系统繁忙
第四行 - 内存的信息
total | 总内存空间 |
---|---|
free | 空闲内存 |
used | 已用内存 |
buff/cache | 缓冲区总和 |
第五行 - 交换空间的信息
total | 总交换空间 |
---|---|
free | 空闲交换空间 |
used | 已用交换空间 |
avail Mem | 可用物理空间 |
进程信息区各列解释
- PID 进程id
- USER 进程所有者的用户名
- PR 优先级
- NI 谦让度值,负值表示高优先级,正值表示低优先级
- VIRT 进程使用的虚拟内存总量,单位kb
- RES 进程使用的物理内存大小,单位kb
- SHR 共享内存大小,单位kb
- S 进程状态
- %CPU 上次更新到现在的CPU时间占用百分比
- %MEM 进程使用的物理内存百分比
- TIME+ 进程使用的CPU时间总计,单位1/100秒
- COMMAND 命令名/命令行
top交互界面常用指令
- P 键:根据CPU使用百分比大小进行排序
- M 键:根据驻留内存大小进行排序
- N 键:根据启动时间进行排序
- c 键:切换显示命令名称和完整命令行**(常用)**
- h 键:可以获得 top程序的在线帮助信息
- k 键:根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
- q 键:退出 top 程序**(常用)**
- 数字1 键:显示CPU个数和状态**(常用)**
3查看进程信息-pgrep
用于在系统中查找正在运行的进程。通过进程名称或其他属性搜索并返回符合条件的进程ID,简化了在复杂系统中查找特定进程的操作。
格式
pgrep [选项] 模式
- 模式: 用于匹配进程名称的正则表达式。
常用选项
- -a:显示进程名和PID。
- -c:仅显示匹配进程的数量,而不显示进程名和PID。
- -f:匹配进程名及其参数。
其他选项
- -l: 显示匹配的进程名称和进程ID
- -u 用户名: 只显示由指定用户拥有的进程。
- -f: 使用完整的命令行来匹配,而不仅仅是进程名称。
- -c: 统计匹配进程的数量,而不是列出它们。
- -d 分隔符: 使用指定的分隔符分隔输出的进程ID。
- -v: 反向匹配,显示不符合条件的进程ID。
- -P 父进程ID: 显示属于指定父进程的子进程。
示例
-
查找进程名称中包含 “bash” 的所有进程ID:
pgrep bash
-
显示进程名称和ID:
pgrep -l bash
-
查找属于特定用户的进程:
pgrep -u user1 bash
-
统计匹配的进程数量:
pgrep -c bash
-
使用完整的命令行匹配:
pgrep -f "/usr/bin/python"
-
查找特定父进程ID的子进程:
pgrep -P 1234
4列出后台作业状态信息-jobs
用于显示当前 shell 会话中后台作业状态的命令。列出正在运行的所有后台作业及其状态,如运行中、停止或已结束,方便用户管理和控制这些作业。
格式
jobs [选项]
常用选项
- -l: 显示作业号和对应的进程ID。
- -n: 仅显示最近发生状态变化的作业。
- -p: 仅显示作业的进程ID。
- -r: 仅显示正在运行的作业。
- -s: 仅显示已停止的作业。
示例
-
显示当前所有后台作业及其状态:
jobs
-
显示作业号和进程ID:
jobs -l
5列出打开的文件和端口信息-lsof
lsof
(List Open Files)是一个用于列出当前系统中打开文件和端口的工具。它可以显示有关所有打开的文件的信息,包括文件名、进程 ID、进程名称、文件描述符、文件类型等。用于跟踪文件和网络连接,诊断系统问题等。
特点
- 主要用于查看系统中所有打开的文件及其相关信息。
- 可以用来检查哪些进程正在使用某些文件,或哪些文件正在被特定进程使用。
格式
lsof [选项] [参数]
常用选项
- -i [协议][端口号]:显示指定协议(如 tcp、udp)和端口号的网络连接。可以省略协议和端口号以显示所有网络连接。
- -u [用户名]:显示指定用户的所有打开文件。
- -p [PID]:显示指定进程 ID 的所有打开文件。
- +D [目录]:递归显示指定目录下所有打开的文件。
- -c [命令名]:显示指定命令的所有打开文件。
- -t:仅显示文件描述符,不显示头部信息。
- -n:以数字形式显示网络地址和端口号,避免进行 DNS 解析。
- -h:显示帮助信息。
示例
-
显示所有打开的文件
lsof
列出系统中所有打开的文件及其相关信息。
-
显示特定进程的打开文件
lsof -p 1234
列出进程 ID 为 1234 的所有打开文件。
-
显示特定用户的打开文件
lsof -u username
列出指定用户(例如
username
)的所有打开文件。 -
显示特定目录下的所有打开文件
lsof +D /var/log
递归显示
/var/log
目录及其子目录下的所有打开文件。 -
显示特定端口的网络连接
lsof -i :80
显示所有正在使用端口 80 的网络连接。
-
显示所有 TCP 连接
lsof -i tcp
显示所有 TCP 连接。
-
显示进程打开的文件而不显示标题信息
lsof -t -p 1234
显示进程 ID 为 1234 的所有打开文件的文件描述符,不显示其他详细信息。
输出字段说明
- COMMAND:进程的命令名。
- PID:进程 ID。
- USER:文件的所有者用户名。
- FD:文件描述符,显示文件的访问模式(如
cwd
表示当前工作目录,txt
表示程序代码,mem
表示内存映射文件等)。 - TYPE:文件类型(如
REG
表示常规文件,DIR
表示目录,CHR
表示字符设备,FIFO
表示 FIFO 文件等)。 - DEVICE:设备号。
- SIZE/OFF:文件的大小或偏移量。
- NODE:文件的节点号(仅适用于本地文件系统)。
- NAME:文件的名称或路径。
6实例:进程的前后台调度
在 Linux 系统中,用户可以通过前后台调度来控制进程的执行方式。进程可以在前台运行,直接与用户交互,或者在后台运行,允许用户在终端中继续其他操作。
示例说明
- 前台运行:
- 运行命令时,默认情况下进程在前台运行,用户可以直接与其交互。
- 例如:
vim 111
会启动vim
编辑器并在前台运行。
- 将进程放到后台并停止运行:
- 将一个正在前台运行的进程移到后台并暂停时,可以使用
Ctrl+Z
。 - 例如:在
vim 111
运行时按Ctrl+Z
,进程会被挂起,并显示为停止状态。
- 将一个正在前台运行的进程移到后台并暂停时,可以使用
- 查看后台作业:
- 使用
jobs
命令查看当前终端中的所有后台作业。 - 例如:
jobs -l
显示后台作业列表,包括每个作业的进程 ID 和状态。
- 使用
- 通过进程名获取进程 ID:
- 使用
pgrep
命令可以根据进程名获取进程 ID。 - 例如:
pgrep -l "vim"
可以显示所有名为vim
的进程及其进程 ID。
- 使用
- 终止进程:
- 使用
kill
命令可以通过进程 ID 或名称终止进程。 - 例如:
kill -9 <进程ID>
强制终止指定进程。
- 使用
- 后台运行进程:
- 在命令末尾添加
&
可以让进程在后台运行。 - 例如:
cp -r /mnt /opt/ &
会将复制操作在后台执行。
- 在命令末尾添加
7终止(杀死)进程-kill
用于终止进程的命令行工具。它可以通过发送信号来控制或终止指定的进程。在 Unix 和 Linux 系统中,进程可以接收不同的信号,每个信号对应不同的操作,例如终止、挂起或重新加载进程。
格式
kill [选项] <进程ID>
常用选项
- -l: 列出所有信号名称。
- -s <信号>: 发送指定信号(默认为 TERM,即终止进程)。
- -9: 强制终止进程(发送 SIGKILL 信号,无法被捕捉或忽略)。
- -15: 发送 SIGTERM 信号,要求进程正常终止(这是默认的信号)。
- -HUP: 发送 SIGHUP 信号,通常用于重新加载进程的配置文件。
示例
-
正常终止进程
kill 1234
发送默认的
SIGTERM
信号来请求进程 1234 终止。 -
强制终止进程
kill -9 1234
发送
SIGKILL
信号,强制终止进程 1234。 -
重启进程
kill -HUP 1234
发送
SIGHUP
信号,通常用于重新加载进程的配置文件而不终止进程。
注意事项
- 权限要求: 只有进程的所有者或超级用户可以发送信号给进程。
SIGKILL
的使用:SIGKILL
是一个不可捕获、不可忽略的信号,用于强制终止进程。使用kill -9
时,应谨慎,因为它会立即终止进程,而不执行任何清理操作。- 进程组终止:可以用
kill -<PID>
(负数)来终止整个进程组。
8查看进程树-pstree
根据进程的层级关系,以树状结构显示进程信息。每个分支表示一个进程及其派生出的子进程。它可以帮助用户更直观地了解进程的父子关系。后面可以连接管道符筛选。
格式
pstree [选项] [PID或用户名]
常用选项
- -p:显示每个进程的 PID(进程 ID)。
- -u:显示进程的所属用户。
- -a:显示每个进程的完整命令行,包括其所有参数。
- -h:高亮显示当前进程及其父进程。
- -n:按 PID 顺序排列进程。
- -G:使用 ASCII 图形字符显示树结构,而不是默认的线条。
示例
-
显示用户名、PID号和完整信息:
pstree -aup
-
只查看属于指定用户的进程树结构:
pstree -ap teacher
9进程的启动方式
手工启动
-
前台启动:用户输入命令,直接执行程序
-
后台启动:在命令行尾加入”&”符号
示例:
[root@localhost ~]#cp /dev/cdrom mycd.iso & [1] 28454
解释:输出信息中包括后台任务序号、PID号
调度启动
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
10进程的前台调度
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
jobs [-l] 查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
示例:
[root@localhost ~]# jobs
[1]- Stopped cp /dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost ~]# fg 1
11终止进程的运行
Ctrl+C组合键
中断正在执行的命令
kill、killall命令
kill 用于终止指定PID号的进程
killall 用于终止指定名称相关的所有进程
-9 选项用于强制终止
pkill命令
根据特定条件终止相应的进程
常用命令选项
-
-U:根据进程所属的用户名终止相应进程
-
-t:根据进程所在的终端终止相应进程
[root@localhost ~]# pgrep -l -U "teacher" 3045 bash [root@localhost ~]# pkill -9 -U "teacher" [root@localhost ~]# pgrep -l -U "teacher"
12一次性计划任务-at
用于在指定的未来时间执行一次性任务的工具。与 cron
不同,at
任务仅执行一次,不会定期重复,适合安排一次性任务。允许用户在指定的时间安排执行特定的命令或脚本。
格式
at [选项] TIME
TIME格式:[HH:MM] [yyyy-mm-dd]
在命交互式界面下,Ctrl+D提交任务
常用选项
- -l 或 atq:列出当前用户的所有待执行 at 任务。
- -d 或 atrm:删除一个 at 任务,可以通过任务 ID 来指定。
- -m:任务完成后发送邮件给用户,报告任务的执行结果。
- -f:从指定文件读取要执行的命令。
TIME 参数
TIME
是指定任务执行的时间,可以使用多种格式,如:
HH:MM
:表示当天的某个时间。noon
、midnight
、teatime
:特殊时间点,分别表示中午、午夜、下午4点。now + 1 hour
:当前时间的基础上增加一段时间。MMDDYY
或DD.MM.YY
:指定某年某月某日。
示例
-
在下午2:30执行一个任务:
echo "backup.sh" | at 14:30
将在当天下午2:30执行
backup.sh
脚本。 -
查看待执行的
at
任务:atq
显示当前用户已安排的所有
at
任务。 -
删除一个任务:
atrm 3
删除任务队列中 ID 为 3 的
at
任务。 -
指定任务执行时间为明天早上9点:
echo "echo 'Good morning'" | at 9:00 AM tomorrow
这将在第二天上午9点输出 “Good morning”。
-
从文件中读取任务:
at -f /path/to/script.sh now + 1 hour
在一小时后执行
script.sh
文件中的所有命令。
注意事项
at
任务的输出(如果有)默认会通过电子邮件发送给用户,除非明确重定向到其他地方或使用m
选项。at
任务仅在系统时间到达指定时间时执行,因此必须确保系统时钟准确无误。
14周期性计划任务-crontab
crontab
工具使用一个称为 cron
的后台服务来运行定期任务。crontab
文件中包含了任务调度信息和相应的命令,每一行代表一个定时任务。任务可以按照分钟、小时、天、月、星期的组合来调度。
按照预先设置的时间周期(分钟、小时、天、月、周)重
复执行用户指定的命令操作。属于周期性计划任务。
主要设置文件
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
常用命令格式
- 编辑crontab计划任务
crontab -e [-u 用户名]
注:-u缺省时默认是针对当前用户
- 查看计划任务
crontab -e [-u 用户名]
- 删除计划任务
crontab -e [-u 用户名]
- 展示当前设定的定时任务
crontab -l -u
- 删除所有定时任务(慎重)
crontab -r -u
其他常用命令
crontab -e
:编辑当前用户的crontab
文件。crontab -l
:列出当前用户的crontab
文件内容。crontab -r
:删除当前用户的crontab
文件,移除所有定时任务。crontab -u username -e
:编辑指定用户的crontab
文件(需要管理员权限)。
文件编辑格式
crontab任务配置的格式,在crontab文件中添加行配置
* * * * * command
注:
- 两段内容:时间周期设置+任务内容设置
- 对应格式:分钟 小时 日期 月份 星期 命令或脚本文件
- 若添加(命令或执行程序的)路径,路径最好是绝对路径
字段说明
字段 | 说明 |
---|---|
分钟 | 取值为从 0 到 59 之间的任意整数 |
小时 | 取值为从 0 到 23 之间的任意整数 |
日期 | 取值为从 1 到 31 之间的任意整数 |
月份 | 取值为从 1 到 12 之间的任意整数 |
星期 | 取值为从 0 到 7 之间的任意整数,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 天 |
示例
每2个月的第2个星期三的18:30,假设每个月的第一天都是星期一
30 18 8-14 */2 3