Linux 系统进程管理与计划任务详解
一、程序与进程的基本概念
- 程序:保存在外部存储介质中的可执行机器代码和数据的静态集合。
- 进程:在CPU及内存中处于动态执行状态的计算机程序。
- 关系:每个程序启动后,可创建一个或多个进程。
二、进程查看工具
1. ps
(查看静态进程信息)
常用选项:
-a
:显示当前终端下所有进程(含其他用户);与-x
结合显示系统所有进程。-u
:以用户为主的格式输出进程信息。-x
:显示当前用户所在终端的进程信息。-e
:显示系统内所有进程。-l
:长格式显示。-f
:完整格式显示。
常用aux和elf的组合
输出字段含义:
USER
:启动进程的用户账号。PID
:进程唯一ID号。%CPU
:CPU占用百分比。%MEM
:内存占用百分比。VSZ
:虚拟内存(swap)占用大小。RSS
:物理内存占用大小。TTY
:运行终端(“?”表示未知/无需终端)。STAT
:进程状态(S休眠、R运行、Z僵死、<高优先级、N低优先级、s父进程、+前台进程、L锁内存)。START
:启动时间。TIME
:占用CPU的时间。COMMAND
:启动进程的命令名称。
2. top
(查看动态进程信息)
核心指标:
load average
:CPU平均负载(1分钟、5分钟、15分钟);若5/15分钟负载超过CPU个数2倍,系统高负载。task
:- total:系统当前所有进程的总数(包括所有状态)。
- running:正在占用 CPU 运行的进程数(处于
R
状态)。 - sleeping:休眠的进程数(等待事件 / 资源,如 I/O 完成,处于
S
或D
状态)。 - stopped:被暂停的进程(如通过
ctrl+z
挂起,处于T
状态)。 - zombie:僵死进程(进程已终止,但父进程未回收其资源,需手动清理)。
%cpu
:- us(user):用户空间进程占用 CPU 的比例(如应用程序)。若长期过高,可能是用户程序消耗资源过多。
- sy(system):内核空间进程占用 CPU 的比例(如系统调用、进程调度)。若过高,可能是内核频繁处理任务(如大量 I/O 调度)。
- ni(nice):调整过优先级的用户进程(通过
nice
命令设置)占用 CPU 的比例。 - id(idle):CPU 空闲的比例。若长期过低(如 < 10%),说明 CPU 负载高。
- wa(iowait):CPU 等待 I/O 操作(如磁盘读写、网络传输)的时间比例。若长期 > 20%,可能是 I/O 瓶颈(如磁盘慢、网络拥堵)。
- hi(hardware irq):硬件中断(如键盘、磁盘控制器)占用 CPU 的比例。
- si(software irq):软件中断(如系统定时器)占用 CPU 的比例。
- st(steal):被虚拟化环境中其他虚拟机占用的 CPU 比例(仅在虚拟机中有效)。
mem
:- total:物理内存总容量(单位通常为 KB)。
- used:已被进程实际使用的内存(不包括缓冲 / 缓存)。
- free:完全空闲的内存(未被任何进程或缓冲 / 缓存使用)。
- buff/cache:
buff
:用于缓冲写入的数据(即将写入磁盘的临时数据,避免频繁磁盘 I/O)。cache
:用于缓存读取的数据(从磁盘读取过的数据,下次可直接从内存读取,加速访问)。- 这部分内存可被系统自动释放给需要的进程,因此实际 “可用内存”≈ free + buff/cache。
swap
:- total:交换空间(虚拟内存)总容量(通常为磁盘上的 swap 分区 / 文件)。
- used:已使用的交换空间(当物理内存不足时,系统会将部分不常用内存数据写入 swap)。
- free:空闲的交换空间。
- avail Mem:估算的 “可用物理内存”(包括 free 内存 + 可释放的 buff/cache,供新进程使用的内存量)。
进程信息字段:
列名 含义说明 PID
进程唯一 ID(系统中唯一,可用于 kill
等命令操作进程)。USER
进程所属用户(进程的创建者或运行用户)。 PR
进程优先级(数值越小,优先级越高): - 0~39 之间(内核动态调整); - 实时优先级(-1~-20,比普通进程高)。 NI
进程的 nice
值(用户可调整的优先级偏移量): - 范围 -20~19(默认 0); - 数值越小,优先级越高(PR = NI + 20
,便于显示)。VIRT
进程占用的虚拟内存总量(包括物理内存、swap、未使用的分配内存等,单位 KB)。 RES
进程实际使用的物理内存(不包括 swap,单位 KB, RES = 实际占用的物理内存
)。SHR
进程与其他进程共享的内存量(单位 KB,包括共享库、共享数据等)。 S
进程状态(单字母标识): - R
:运行中(正在使用 CPU 或等待调度); -S
:休眠(等待事件,可被唤醒); -D
:不可中断休眠(如等待磁盘 I/O,不能被信号终止); -T
:停止(被ctrl+z
或kill -19
暂停); -Z
:僵死(进程已终止,资源未回收)。%CPU
进程自上次刷新以来占用 CPU 的百分比(单个核心为 100%,多核心总和可超过 100%)。 %MEM
进程使用的物理内存占系统总内存的百分比。 TIME+
进程自启动以来累计占用的 CPU 时间(精确到 0.01 秒)。 COMMAND
启动进程的命令(按 c
可显示完整命令路径)。
3. 其他进程查看命令
pgrep -l 进程名
:查看某进程的进程号和名称(如pgrep -l systemd
)。pstree
:查看进程树形结构:-p
:同时列出PID;-u
:列出用户名;-a
:列出完整命令。
三、进程控制
1. 手动启动进程
- 前台启动:默认方式(命令直接执行)。
- 后台启动:命令后加
&
(如route &
,进程放入后台执行)。
2. 进程挂起与恢复
- 挂起当前进程:前台执行的命令按
ctrl+z
,调入后台并停止执行。 - 查看后台进程:
jobs -l
。 - 恢复运行:
bg
:后台暂停的任务恢复后台执行。fg
:后台任务恢复到前台执行。
3. 终止进程
kill 进程号
:终止指定进程;-9
选项强制终止(如kill -9 1234
)。killall 进程名
:终止多个同名进程;-9
强制(如killall -9 httpd
)。pkill
:按进程名、用户、终端等终止(-U
指定用户,-t
指定终端)。
四、计划任务
用于在指定时间/日期执行预设任务(如备份、数据采集)。
1. at
(一次性任务)
- 设置:
at 时间 日期
(如at 23:30 2020-11-23
),输入命令后按ctrl+d
结束。 - 示例:
at 23:30 2020-11-23
→at> ls / > /tmp/a
→ctrl+d
。 - 管理:
atq
:查询at任务。at -c 任务号
:查看任务详情。atrm 任务号
:删除任务。
2. crontab
(周期性任务)
- 配置文件:
- 系统任务:
/etc/crontab
。 - 用户任务:
/var/spool/cron/
(按用户名存储)。
- 系统任务:
- 时间格式:分 时 日 月 周(空格分隔)。
- 常用选项:
-e
:编辑计划任务。-u 用户名
:指定用户(如crontab -u natasha -e
)。-l
:查询任务列表。-r
:删除任务列表。
- 示例:
- 为用户natasha配置每天14:23执行
/bin/echo "RHCSA"
,仅允许natasha和root创建任务:useradd natasha crontab -u natasha -e 输入:23 14 * * * /bin/echo "RHCSA" vim /etc/cron.allow 创建白名单只允许natasha和root创建任务 写入:root、natasha systemctl restart crond && systemctl enable crond
- 每月1~5号14:00-17:00,每10分钟执行
/bin/echo "I Love Galaxy"
:crontab -e # 输入:*/10 14-17 1-5 * * /bin/echo "I Love Galaxy" systemctl restart crond && systemctl enable crond
- 周一至周五8:00-21:00,每2分钟将当前时间附加到
/home/galaxy/my_first_cron_job.txt
:crontab -e # 输入:*/2 8-21 * * 1-5 date >> /home/galaxy/my_first_cron_job.txt
- 为用户natasha配置每天14:23执行