Linux——进程管理和计划任务管理
文章目录
- 前言
- 一、程序与进程的关系
- 1.1 程序与进程的定义
- 1.2 父进程与子进程
- 二、查看进程信息
- 2.1 ps 命令(重点)
- 2.2 动态查看进程信息top命令(重点)
- 2.3 pgrep命令查询进程信息
- 2.4 pstree命令以树形结构列出进程信息
- 三、进程的启动方式
- 3.1 手工启动进程
- 3.2 调度启动
- 四、进程的前后台调度
- 4.1 Ctrl+Z组合键
- 4.2 jobs 命令
- 4.3 fg 和 bg 命令
- 五、终止进程的运行
- 5.1 Ctrl+C组合键
- 5.2 kill 命令
- 5.3 killall 命令
- 5.4 pkill 命令
- 六、计划任务管理
- 6.1 一次性任务:at 命令
- 6.2 周期性任务:cron 命令
- 6.3 cron 服务管理
- 总结
前言
进程管理是操作系统管理进程和资源的关键部分。在 Linux 中,进程是系统中所有任务的核心,进程管理命令主要用于查看、控制和调度系统中的进程。本文档将详细介绍 Linux 进程管理的相关概念、命令及实际应用案例,帮助用户高效管理系统中的进程和计划任务。
一、程序与进程的关系
1.1 程序与进程的定义
- 程序:是存储在硬盘上的可执行代码,像一本书的内容,静态存放在硬盘或其他存储设备上。例如,你下载并安装的一个应用程序(如
firefox
)。 - 进程:是程序在运行时的实例,像是一本书被人打开并阅读时,它在你眼前执行的过程。每当你运行一个程序,操作系统会创建一个进程,分配内存和 CPU 时间来执行这个程序。
1.2 父进程与子进程
-
父进程:操作系统中的核心进程,负责创建和管理子进程。类似于家庭中的家长角色,父进程为子进程分配系统资源(如内存和CPU时间片),并持续监控其运行状态。典型的例子是Linux系统中的
init
进程(PID=1
),它作为所有用户进程的源头。父进程通过调用fork()
等系统调用来创建子进程,并可使用wait()
等调用等待子进程结束。 -
子进程:由父进程通过系统调用创建的独立执行实体,拥有专属的进程ID和地址空间。子进程会继承父进程的环境变量、文件描述符等属性,但运行后即实现完全独立。通过
exec()
系列函数,子进程可以加载新程序并执行不同任务。例如在Web服务器架构中,主进程(父进程)会为每个客户端请求生成独立的子进程进行处理。子进程完成任务后,通过exit()
系统调用终止运行,并向父进程返回状态信息。
二、查看进程信息
2.1 ps 命令(重点)
ps
(process status)命令用于查看系统中当前运行的进程。它显示了与进程相关的信息,如进程 ID (PID)、用户、CPU 和内存使用率等。
- 常用选项:
ps -aux
:显示所有进程,包括其他用户的进程。ps -ef
:以标准格式显示所有进程。ps -aux | grep [进程名]
:通过管道和grep
命令过滤进程。
- 输出字段解释:
- USER:进程所属的用户。
- PID:进程 ID。
- %CPU:进程占用的 CPU 百分比。
- %MEM:进程占用的内存百分比。
- VSZ:进程使用的虚拟内存(单位 KB)。
- RSS:进程使用的物理内存(单位 KB)。
- STAT:进程的状态,常见状态有:R(运行)、S(睡眠)、
Z(僵尸)
、T(停止)等。 - START:进程的启动时间。
- TIME:进程占用的 CPU 时间。
- COMMAND:启动该进程的命令。
详解
STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
。
D:系统守护进程
T:调式、程序执行一般停止
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态D 不可中断状态.
它们含意如下::
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
D:系统守护进程
案例:
执行完毕vim
命令之后,查找 vim
进程,并显示它的 CPU 和内存占用情况。
vim a.txt
ps -aux | grep vim
将/usr
目录归档到当前文件夹,查看该进程状态
tar -zcvf usr.tar.gz /usr
ps -aux|grep /usr
2.2 动态查看进程信息top命令(重点)
top
命令用于动态显示 Linux 系统中运行的进程和资源使用情况,实时更新显示。
- 常用快捷键:
P
:按 CPU 使用率排序。M
:按内存使用量排序。T
:按时间排序。1
:查看几个cpuq
:退出 top。
- 输出解释:
- PID:进程 ID。
- USER:启动该进程的用户。
- %CPU:进程占用的 CPU 百分比。
- %MEM:进程占用的内存百分比。
- TIME+:进程累计使用的 CPU 时间。
- COMMAND:执行的命令。
案例1:
top
启动 top
,查看实时的进程和系统资源占用情况。按 P
键查看 CPU 使用率排序,按 M
键查看内存使用情况排序。
按 P
键查看 CPU 使用率排序
按 M
键查看内存使用情况排序
案例2:
安装系统压力测试工具stress
# 启用 EPEL 仓库
yum install -y epel-release
# 安装 stress 工具
yum install -y stress
# 验证安装是否成功
stress --version
-c, --cpu N
:指定 N 个进程,每个进程执行计算密集型的任务,通常是计算随机数的平方根(消耗 CPU 资源)。
示例:
stress -c 4
top
启动 4 个进程,消耗 CPU 资源。
2.3 pgrep命令查询进程信息
pgrep
命令用于根据名称或其他条件查找进程。
常用的参数:
- -l:选项可同时输出对应的进程名以及PID
- -U:选项查询特定用户的进程
- -t:选项查询在特定终端运行的进程
例1
pgrep -l "log" # 匹配进程名中包含 log 的进程
例2
pgrep -l -U simon
# 筛选属于用户simon的进程
2.4 pstree命令以树形结构列出进程信息
pstree
是一个用于显示当前系统中进程树结构的命令行工具。它以树状图形式展示进程间的父子关系,便于直观理解进程的层级关系。
pstree
命令默认情况下只显示各进程的名称,结合以下常用的参数使用:
- -p:选项使用时可以同时列出对应的PID号
- -u:选项可以列出对应的用户名
- -a:选项可以列出完整的命令信息
执行如下的“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”例1
pstree -aup hmj
三、进程的启动方式
3.1 手工启动进程
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
进程在前台运行:
(如执行ls -l
命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。
启动后台进程需要使用&
操作符,将&
操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使 用 cp
命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合&
符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作
cp /dev/cdrom /opt/centos7.iso &
3.2 调度启动
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。
进程的调度启动可以通过 at
、crontab
命令进行设置,其中 at
命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab
命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。
四、进程的前后台调度
4.1 Ctrl+Z组合键
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z
组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr
并且调入后台 ,可以按 Ctrl+Z
组合键将该下载任务调入后台并暂停执行
tar zcf usr.tar.gz /usr
Ctrl+Z
jobs -l # 查看所有后台进程
4.2 jobs 命令
jobs
命令用于查看当前会话中运行的后台任务。
常用选项:
jobs -l
:列出当前所有后台任务及其进程 ID。
案例:
将后台的进程恢复运行
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作
为参数。例如,执行如下的“fg 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行。
[root@localhost ~]# jobs
[1]- Stopped cp /dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost ~]# fg 1
查看当前终端会话中的后台任务。
4.3 fg 和 bg 命令
- fg:将后台任务带回前台执行。
- bg:将暂停的任务放回后台继续执行。
案例:
fg %1
将后台任务编号为 1 的任务带回前台。
bg %2
将后台任务编号为 2 的任务恢复在后台运行。
五、终止进程的运行
5.1 Ctrl+C组合键
中断正在执行的命令
5.2 kill 命令
kill
命令用于发送信号给进程,通常用来终止进程。
常用选项:
kill [PID]
:正常终止进程。kill -9 [PID]
:强制终止进程(不可恢复)。(常用)
案例:
kill 6281
终止 PID 为 1234 的进程。
kill -9 6281
强制终止 PID 为 1234 的进程。
5.3 killall 命令
killall
命令根据进程名称终止进程。
案例:
vim test1.txt &
vim test2.txt &
vim test3.txt &
ps -aux|grep vim # 查看和vim有关的进程
killall -9 vim # 终止所有名为 vim的进程
一次性杀死所有和vim
有关的进程
5.4 pkill 命令
pkill
命令根据进程属性(如用户名、终端等)终止进程。
案例:
su - simon # 切换用户
vim test1.txt &
vim test2.txt &
vim test3.txt &
ps -aux|grep simon
pkill -9 -U simon
ps -aux|grep simon # 查看该用户的进程是否被杀死
终止所有由 root
用户启动的进程。
六、计划任务管理
计划任务用于自动执行系统中的任务。Linux 中常用的计划任务工具包括 at
和 cron
。
6.1 一次性任务:at 命令
at
命令用于设置一次性任务,任务将在指定时间执行。
- 命令格式:
at [HH:MM] [yyyy-mm-dd]at> [要执行的命令] # 按CTRL+D提交任务
-
常用选项:
atq
:列出待执行的任务。atrm [任务编号]
:删除指定的任务。
案例:
date
at at 14:25 2025-08-16
at>pgrep -U root|wc -l > /opt/ps.root
at> <EOT>
设置任务在指定时间执行,并将输出保存到 /opt/ps.root
文件中。
atq
列出待执行的任务
·atrm [任务编号]
:删除指定的任务。
6.2 周期性任务:cron 命令
cron
用于设置定期执行的任务。用户可以通过 crontab
命令编辑和管理自己的计划任务。
主要设置文件:
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
命令格式:
* * * * * [command]
*
:每个字段的取值范围:分钟(0-59),小时(0-23),日期(1-31),月份(1-12),星期(0-6,0 为周日)。[command]
:要执行的命令。
由于各字段的作用不同,其取值范围也不一样,如表 9-2 所示,当使用“*”时表示取值范围中的任意时间。crontab 任务配置记录中所设置的命令操作将在“分钟”+“小时”+“日期”+ “月份”+“星期”都满足的条件下执行。
crontab 计划任务的配置字段说明分钟 取值为 0~59 的任意整数
小时 取值为 0~23 的任意整数
日期 取值为 1~31 的任意整数(日期在该月份中必须有效)
月份 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,0 或 7 代表星期日命令 可以是普通的命令,也可以是自己编写的程序脚本除了“*”以外,还可以使用“-”(减号)、“,”(逗号)、“/”(斜杠)与数字构成表达式来表 示较复杂的时间关系。
减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。
逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。
应用示例:
0 17 * * 1-5
每周一至周五下午5点整30 8 * * 1,3,5
每周一、三、五上午8点30分0 8-18/2 * * *
每天上午8点至下午6点,每隔2小时执行一次0 0 */3 * *
每3天执行一次
常用命令:
-
crontab -e [-u 用户名]
:编辑当前用户的 cron 任务。 -
crontab -l [-u 用户名]
:列出当前用户的 cron 任务。 -
crontab -r [-u 用户名]
:删除当前用户的所有 cron 任务。
其他命令:
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的项可以完成不同的计划任务管理操作。常用的选项如下。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
下面将分别讲解 crontab 命令相关选项的使用。crontab -u 用户名 #指定XX用户的cron服务crontab -u zx -l #列出zx用户下的cron的详细内容crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容crontab -r -u zx #删除zx用户的cron内容
案例1:
50 7 * * * /usr/bin/systemctl start httpd.service
25 15 * * * /usr/bin/systemctl stop httpd.service
每天的 7:50 启动 httpd
服务,15:25 停止 httpd
服务。
crontab -e50 7 * * * /usr/bin/systemctl start httpd.service
25 15 * * * /usr/bin/systemctl stop httpd.service
crontab -l [-u 用户名]
:列出当前用户的 cron 任务。
crontab -r [-u 用户名]
:列出当前用户的 cron 任务。
案例2:
每两分钟记录一次/opt
目录下内容
crontab -e
*/2 * * * * /usr/bin/ls -lh /opt/* >> /opt/bak.txt
tail -f /var/log/cron # 追踪cron的日志文件
6.3 cron 服务管理
- 启动 cron 服务:
systemctl start crond
- 查看 cron 服务状态:
systemctl status crond
- 启用 cron 服务开机启动:
systemctl enable crond
扩充 生产案列
例如,若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上 7:50
自动开启 sshd 服务,22:50 关闭 sshd 服务;②每隔五天清空一cron 次 FTP 服务器公共目录
/var/ftp/pub 中的数据;③每周六的 7:30 重新启动系统中的 httpd 服务;④每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目录,则可由 root 用户通过 crontab 设置以下计划任务。[root@localhost ~]# crontab -e
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.servic
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
*/2 * * * * ls -lh /home/*普通用户执行“crontab -e”命令时,可以设置自己的计划任务(需要注意命令的执行权限)。
例如,用户 jerry 设置一条计划任务:在每周日晚上的 23:55 将/etc/passwd 文件的内容复制到宿主目录中,保存为 pwd.txt 文件,具体操作如下:
[jerry @localhost ~]# crontab -e
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt因各条计划任务在执行时并不需要用户登录,所以任务配置记录中的命令建议使用绝对路径,以避免因缺少执行路径而无法执行命令的情况。另外,在设置非每分都执行的任务时, “分钟”字段也应该填写一个具体的时间数值,而不要保留为默认的“*”,否则将会在每分钟执行一次计划任务。
(2)查看用户的计划任务列表
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务,具体操作如下:[root@localhost ~]# crontab –l //查看用户root 自己的计划任务
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.servic
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
[root@localhost ~]# crontab -l -u jerry //查看用户jerry 的计划任务
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt
[root@localhost ~]# ls -l /var/spool/cron/jerry
-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/jerry(3)删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令。[jerry@localhost ~]$ crontab -r //用户jerry 清空自己设置的计划任务[jerry@localhost ~]$ crontab -l
[jerry@localhost ~]$ crontab -l
no crontab for jerry案列
21 17 * * * /usr/bin/systemctl reboot
26 17 * * * /usr/bin/cp -r /etc/ /home/
#0 8-18/2 * * * /usr/binsystemctl start vsfrpd.service
0 * */3 * * /usr/bin/rm -rf /var/log/ftp/*.log
*/2 * * * * /usr/bin/systemctl start vsfrpd.service[root@192 home]# crontab -l -u lisi
17 19 * * * /usr/bin/cp -r /home/etc/ /home/lisi/backup/journalctl -xe
案例总结:
- 查看进程:
ps -aux | grep vim
查看 vim
进程的 CPU 和内存使用情况。
- 设置周期性任务:
crontab -e30 2 * * * /usr/bin/rsync -av /data /backup# 每天02:30将/data的内容同步到/backup
总结
这篇文档详细介绍了 Linux 系统中的进程管理及相关命令,涵盖了从基本概念到实际操作的全方位内容。以下是核心要点总结:
-
程序与进程的关系
- 程序:静态存储在硬盘上的可执行代码。
- 进程:程序运行的动态实例,由操作系统分配资源(如内存、CPU)执行。
- 父进程与子进程:父进程创建并管理子进程,类似于公司中的上下级关系。
-
查看进程信息
ps
命令:查看当前运行的进程,常用选项如ps -aux
或ps -ef
,支持通过grep
过滤特定进程。top
命令:动态实时显示进程及资源占用情况,支持按 CPU、内存等排序。pgrep
和pstree
:分别用于查询进程 PID 和以树形结构展示进程关系。
-
进程的启动方式
- 手工启动:分为前台启动(占用终端)和后台启动(使用
&
符号)。 - 调度启动:通过
at
设置一次性任务,或通过cron
设置周期性任务(如定时备份)。
- 手工启动:分为前台启动(占用终端)和后台启动(使用
-
进程的前后台调度
Ctrl+Z
:挂起当前前台进程到后台并暂停。jobs
、fg
、bg
:分别用于查看后台任务、将任务恢复到前台或后台继续运行。
-
终止进程
Ctrl+C
:中断当前前台进程。kill
、killall
、pkill
:通过 PID、进程名或属性终止进程,kill -9
用于强制终止。
-
计划任务管理
at
:设置一次性任务,如定时执行脚本。cron
:通过crontab
管理周期性任务,支持灵活的时间配置(如每天、每周或每隔几天执行)。- 服务管理:使用
systemctl
启动、启用或查看crond
服务状态。
-
实际案例
- 使用
ps -aux | grep vim
查看vim
进程。 - 通过
crontab -e
设置每天定时启动/停止服务或备份文件。 - 使用
kill -9 PID
强制终止无响应的进程。
- 使用
本文档为 Linux 系统管理员和用户提供了全面的进程管理指南,帮助用户高效监控、调度和控制系统中的进程,同时通过自动化任务提升系统管理效率。无论是日常维护还是复杂任务调度,这些命令和技巧都能发挥重要作用。