如果你用过Linux, 那么你一定遇到过这些烦恼:
系统突然卡慢,不知道是哪个进程占满了CPU或内存;
程序在终端运行着,想做其他操作只能再开一个窗口,不知道怎么把程序放到后台;
软件卡死了,点关闭没反应,不知道怎么强制结束进程;
分不清前台进程、后台进程,jobs、bg、fg命令看着就头大,完全不知道怎么用……
进程管理是Linux系统运维的核心必备技能,不管是日常使用、服务运维,还是故障排查、性能优化,都离不开它。本文从核心概念讲起,手把手带你吃透ps、top、kill、jobs、bg、fg六大核心命令,搭配可直接复制的实操案例、实用技巧和避坑指南,新手跟着敲一遍就能完全掌握。
前置说明
- 本文实操完全适配 Ubuntu 、Debian 、CentOS 、Anolis OS等所有主流Linux发行版,命令通用;
- 普通用户可执行大部分查看命令,涉及终止进程、修改系统级进程的操作需要
sudo 提权; - 文中所有代码块均标注「可直接复制」,实操时注意替换占位符(如PID、进程名),避免误操作;
kill 系列命令有风险,切勿随意终止系统核心进程,建议先在测试环境用非系统进程练习。
一、先搞懂:进程管理核心概念
1. 什么是进程?
进程就是正在运行中的程序,是系统分配资源(CPU、内存)的基本单位。
- 通俗类比:你电脑上的微信安装包是程序,双击打开后运行的微信就是一个进程;你在终端执行的一条命令、启动的一个服务,都会生成对应的进程。
- 每个进程都有一个唯一的PID(进程ID),系统通过PID识别和管理进程;同时还有PPID(父进程ID),记录创建这个进程的父进程PID。
2. 进程的3种核心类型(新手重点区分)
| | | |
|---|
| | | |
| | | 执行命令时末尾加&,如 ping baidu.com & |
| | 不受终端影响,开机自启,关机才停止,通常PID很小 | |
3. 核心补充:任务号(Job ID)
后台进程/挂起的进程,除了PID,还会被分配一个任务号(Job ID),这个编号只在当前终端有效,是jobs、bg、fg命令操作的核心标识,和全局唯一的PID完全不同,新手不要混淆。
二、进程查看命令1:ps 静态查看进程
ps 是Linux最基础的进程查看命令,全称Process Status,作用是静态查看系统中某一时刻的进程快照,不会实时刷新,适合快速查找进程PID、确认进程是否运行。
2.1 两种最常用的用法(新手直接记这两个就够了)
ps命令的参数非常多,新手不用记复杂参数,掌握下面两种高频用法,就能覆盖90%的使用场景。
用法1:ps aux(BSD风格,最常用,查看所有进程详细信息)
# 查看系统所有进程的详细信息(最常用)ps aux
输出字段详解(新手重点看前10列)
用法2:ps -ef(POSIX风格,适合查看父子进程关系)
# 查看系统所有进程,重点展示PPID(父进程ID)ps -ef
输出核心字段
核心区别:相比 ps aux,ps -ef会明确展示PPID(父进程ID),适合排查进程的父子关系,比如看某个进程是被哪个程序启动的。
2.2 高频实操场景(新手必练)
ps命令单独用输出内容太多,通常会搭配 grep过滤,精准找到目标进程,这是日常最高频的用法。
# 1. 精准查找指定名称的进程(最常用)# 语法:ps aux | grep 进程名/关键词ps aux | grep nginx# 输出:所有包含nginx关键词的进程,能直接看到nginx的PID、运行用户、启动命令
# 2. 查找CPU占用最高的前10个进程ps aux --sort=-%cpu | head -10# 解读:--sort=-%cpu 按CPU占用降序排序,head -10 只显示前10条
# 3. 查找内存占用最高的前10个进程ps aux --sort=-%mem | head -10
# 4. 查看指定用户运行的所有进程ps -u root# 查看root用户运行的所有进程ps -u www# 查看www用户运行的所有进程
实用技巧 & 避坑点
✅ 技巧:新手优先用 ps aux | grep 关键词,简单高效,90%的场景都够用;
❌ 避坑:grep过滤时,输出结果里会包含grep进程本身,可加 grep -v grep过滤掉,比如 ps aux | grep nginx | grep -v grep。
三、进程查看命令2:top 实时监控进程
ps是静态快照,而 top是动态实时监控进程和系统资源的工具,相当于Windows的任务管理器,能实时刷新CPU、内存、负载和进程的运行状态,是排查系统卡慢、资源占用过高的核心工具。
3.1 基础用法
# 直接执行,启动top实时监控界面top
3.2 界面详解(新手重点看这2部分)
top界面分为上下两部分,上半部分是系统整体资源统计,下半部分是进程实时列表,我们只讲新手能用到的核心字段,避免信息过载。
第一部分:系统整体资源统计(前5行)
| | | |
|---|
| load average: 0.32, 0.18, 0.12 | | |
| | | |
| | | ✅ id越接近100,CPU越空闲;低于20说明CPU压力大 |
| | | |
| | | |
第二部分:进程列表(核心字段)
和ps aux的输出基本一致,重点关注这几个:
3.3 top 高频交互指令
top运行过程中,直接在键盘按对应按键,就能执行操作,新手掌握这几个就够了:
| | |
|---|
| | |
| | |
| 终止进程,按k后输入PID,再输入信号编号(默认15)即可杀进程 | |
| | |
| | |
| | |
| | |
3.4 进阶实用用法
# 1. 只监控指定用户的进程top -u www# 只显示www用户运行的进程
# 2. 只监控指定PID的进程top -p 1089# 只监控PID为1089的mysql进程
# 3. 非交互模式输出top结果(适合写入脚本)top -b -n 1# -b 批处理模式,-n 1 只刷新1次就退出
补充:htop 更友好的替代工具
htop是top的增强版,界面更美观、操作更友好,支持鼠标操作、彩色输出、横向滚动,新手更容易上手,默认系统不安装,需手动安装:
# Ubuntu/Debian安装sudo apt install htop -y# CentOS/Anolis安装sudo yum install htop -y# 直接运行htop
四、进程终止命令:kill、killall、pkill(谨慎使用)
当程序卡死、服务无法正常停止时,就需要用终止命令结束进程,核心命令是 kill,还有两个衍生命令 killall、pkill,新手务必先看避坑提示再操作。
4.1 核心前置知识:进程信号
终止进程的本质,是给进程发送对应的信号,让进程执行停止操作,新手必须掌握2个最常用的信号:
关键说明
- 默认情况下,
kill命令发送的是15号信号,会让进程正常关闭,释放占用的资源、保存数据,是推荐优先使用的方式; - 9号信号是强制终止,内核会直接杀掉进程,可能导致数据丢失、资源不释放、临时文件残留,只能在进程卡死、15号信号无法终止时使用,不要上来就用kill -9。
4.2 kill 命令(最核心,按PID终止进程)
kill命令的核心是通过PID终止进程,必须先通过ps/top命令找到进程的PID,再执行终止操作。
# 语法:kill [信号编号] PID# 1. 正常终止进程(推荐优先使用,默认15号信号)kill 1089# 终止PID为1089的进程,等价于 kill -15 1089
# 2. 强制终止进程(仅当正常终止无效时使用)kill -9 1089# 强制杀掉PID为1089的进程
# 3. 同时终止多个进程kill -15 1089 2156 3201# 空格分隔多个PID,同时终止多个进程
4.3 killall 命令:按进程名终止进程
killall可以直接通过进程名称终止进程,不用先查PID,适合批量终止同名进程。
# 语法:killall [信号编号] 进程名# 1. 正常终止所有nginx进程killall nginx# 等价于 killall -15 nginx,会终止所有名称为nginx的进程
# 2. 强制终止所有python3进程killall -9 python3
# 3. 交互式终止进程,终止前会询问确认(新手推荐,避免误杀)killall -i nginx# 输出:Kill nginx(1089) ? (y/N) 输入y确认终止
4.4 pkill 命令:按关键词模糊匹配终止进程
pkill支持通过关键词模糊匹配终止进程,不用写完整的进程名,适合记不清完整进程名的场景,但风险更高,容易误杀。
# 语法:pkill [信号编号] 关键词# 终止所有名称包含mysql的进程pkill mysql
# 强制终止所有名称包含python的进程pkill -9 python
实用技巧 & 避坑指南
✅ 技巧1:终止进程前,先用 ps aux | grep 进程名确认PID和进程信息,避免杀错进程;
✅ 技巧2:新手用killall/pkill时,优先加 -i交互式参数,确认后再终止,避免误杀;
❌ 避坑1:绝对不要用 kill -9 1、killall systemd终止系统核心进程,会直接导致系统崩溃;
❌ 避坑2:不要用pkill模糊匹配短关键词(比如 pkill sh),会误杀系统大量shell进程,导致终端断开;
❌ 避坑3:生产环境禁止批量执行 killall -9或 pkill -9,可能导致业务中断、数据丢失。
五、前后台任务管理:jobs、bg、fg
很多新手用Linux时,一个程序在终端运行着,就只能等它结束才能做其他事,学会前后台任务管理,就能完美解决这个问题,核心命令是 jobs、bg、fg,先搞懂2个基础操作。
前置基础操作
1. & 符号:启动进程时直接放到后台运行
在执行的命令末尾加 &,就能让进程启动后直接在后台运行,不占用当前终端。
# 示例:ping百度,直接放到后台运行ping baidu.com &# 输出:[1] 3567# 解读:[1]是任务号(Job ID),3567是PID
2. Ctrl+Z:挂起当前前台进程
如果一个进程已经在前台运行了,按 Ctrl+Z,就能把这个进程挂起(暂停运行),并放到后台,终端会被释放,你可以继续输入其他命令。
# 示例:前台运行ping命令,按Ctrl+Z挂起ping baidu.com# 按Ctrl+Z后,输出:# ^Z# [1]+ 已停止 ping baidu.com# 解读:进程被暂停,放到了后台,任务号是1
5.1 jobs 命令:查看后台任务列表
jobs命令的核心作用,是查看当前终端所有后台任务(挂起/运行中)的列表,这是bg、fg命令的基础。
# 基础用法,直接执行jobs
示例输出:
[1]- 运行中 ping baidu.com &[2]+ 已停止 vim test.txt
输出字段详解
[1][2]:任务号(Job ID),bg、fg命令用这个编号操作,不是PID;状态:运行中=后台正在运行,已停止=被Ctrl+Z挂起暂停;进阶用法
# 查看后台任务的PIDjobs -l# 输出会额外显示每个任务的PID
5.2 bg 命令:把挂起的进程放到后台运行
bg全称Background,核心作用是把被Ctrl+Z挂起暂停的进程,放到后台继续运行,不用再等前台执行完。
# 语法:bg %任务号# 1. 把任务号为1的挂起进程,放到后台运行bg %1# 输出:[1]+ ping baidu.com &# 进程恢复运行,在后台执行
# 2. 不带任务号,默认操作带+号的当前任务bg# 等价于 bg %+
5.3 fg 命令:把后台进程调到前台运行
fg全称Foreground,核心作用是把后台运行/挂起的进程,调回到前台终端运行。
# 语法:fg %任务号# 1. 把任务号为1的后台进程,调到前台运行fg %1# 进程回到前台,你可以看到它的输出,也可以用Ctrl+C终止它
# 2. 不带任务号,默认把带+号的当前任务调到前台fg
5.4 完整实操流程(新手跟着敲一遍就会)
我们用ping命令做一个完整的前后台切换演示,你可以直接复制到终端执行,彻底搞懂整个流程:
# 1. 前台启动ping命令,持续运行,占用终端ping baidu.com# 2. 按 Ctrl+Z 挂起进程,终端被释放# 此时输出:[1]+ 已停止 ping baidu.com# 3. 用jobs查看后台任务列表jobs# 输出:[1]+ 已停止 ping baidu.com# 4. 用bg把挂起的进程放到后台继续运行bg %1# 输出:[1]+ ping baidu.com &# 5. 再次用jobs查看,进程已经变成运行中jobs# 输出:[1]+ 运行中 ping baidu.com &# 6. 用fg把后台进程调回前台fg %1# 进程回到前台,能看到ping的持续输出# 7. 按 Ctrl+C 终止进程
5.5 进阶补充:nohup 关闭终端进程不退出
用 &放到后台的进程,关闭当前终端后,进程会被终止。如果想让进程在关闭终端后依然在后台运行,需要搭配 nohup命令(no hang up,不挂断)。
# 核心语法:nohup 命令 &# 示例:后台持续运行ping命令,关闭终端也不退出nohup ping baidu.com &
- 命令执行后,进程的输出会默认写入当前目录的
nohup.out文件,不会打印到终端; - 这是Linux后台运行服务、脚本最常用的方式,新手必须掌握。
实用技巧 & 避坑点
✅ 技巧:任务号前面的 %不能省略,否则fg/bg会把任务号当成PID处理;
✅ 技巧:后台运行脚本/服务时,优先用 nohup 命令 &,避免关闭终端后进程退出;
❌ 避坑:任务号只在当前终端有效,换了终端,jobs看不到之前的后台任务,只能用ps命令查找。
六、常见问题与避坑指南
1. 用kill终止进程,提示“没有那个进程”
- 原因2:没有权限,普通用户不能终止root用户的进程,需要加sudo;
- 解决方法:先用
ps aux | grep 进程名确认PID是否正确,确认进程还在运行,普通用户加sudo提权。
2. 系统CPU占用很高,怎么快速排查是哪个进程的问题?
- 第一步:执行
top命令,按 P按CPU占用降序排序,看排在最前面的进程; - 第二步:用
ps aux --sort=-%cpu | head -10快速打印CPU占用最高的10个进程; - 第三步:确认进程是否为业务进程,非必要进程用kill命令终止,业务进程排查程序问题。
3. 什么是僵尸进程?怎么处理?
- 僵尸进程:子进程已经终止,但父进程没有回收它的资源,进程状态变成Z(zombie),占用PID,不占用系统资源;
- 危害:少量僵尸进程无影响,大量僵尸进程会占满系统PID,导致无法创建新进程;
- 用
ps aux | grep Z找到僵尸进程的PID和PPID; - 若无效,用kill命令终止父进程,僵尸进程会被系统init进程回收。
4. 用jobs看不到后台进程,怎么办?
- 原因:jobs只能查看当前终端创建的后台任务,换了终端、关闭终端重连后,都看不到;
- 解决方法:用
ps aux | grep 进程名/关键词查找进程,通过PID管理。
5. 执行nohup命令后,nohup.out文件越来越大,怎么办?
- 原因:nohup会把进程的所有输出都写入nohup.out,长时间运行会导致文件过大;
- 解决方法:将输出重定向到/dev/null(空设备,直接丢弃),只保留错误输出:
nohup ping baidu.com > /dev/null 2>&1 &
七、常用命令速查表(建议收藏,日常直接查)
# ===================== 进程查看命令 =====================ps aux # 查看系统所有进程详细信息ps -ef # 查看所有进程,重点展示父子进程关系ps aux | grep 关键词 # 过滤查找指定进程ps aux --sort=-%cpu | head -10 # 查看CPU占用最高的10个进程ps aux --sort=-%mem | head -10 # 查看内存占用最高的10个进程top # 实时监控系统资源和进程top -u 用户名 # 只监控指定用户的进程top -p PID # 只监控指定PID的进程htop # top增强版,更友好的实时监控工具# ===================== 进程终止命令 =====================kill PID # 正常终止指定PID的进程(默认15号信号)kill -9 PID # 强制终止指定PID的进程killall 进程名 # 按名称终止所有同名进程killall -i 进程名 # 交互式终止同名进程(新手推荐)pkill 关键词 # 按关键词模糊匹配终止进程# ===================== 前后台任务管理 =====================命令 & # 启动进程时直接放到后台运行Ctrl+Z # 挂起当前前台进程jobs# 查看当前终端后台任务列表jobs -l # 查看后台任务及对应PIDbg %任务号 # 把挂起的进程放到后台运行fg %任务号 # 把后台进程调到前台运行nohup 命令 & # 后台运行进程,关闭终端不退出
八、总结
- 进程是运行中的程序,每个进程有唯一的PID,分为前台进程、后台进程、守护进程三大类,这是所有操作的基础;
- 进程查看两大核心命令:
ps用于静态快照查找进程,搭配grep过滤精准高效;top用于实时动态监控,排查系统资源占用问题; - 进程终止优先用
kill -15正常终止,kill -9强制终止仅作为兜底手段,切勿滥用;killall按名称杀进程,pkill模糊匹配,新手务必加 -i交互式确认,避免误杀; - 前后台任务管理核心:
&后台启动、Ctrl+Z挂起、jobs查看、bg后台运行、fg前台恢复,搭配 nohup实现关闭终端进程不退出; - 新手避坑核心:所有终止进程的操作,先确认进程信息再执行,切勿随意操作系统核心进程;生产环境禁止批量强制终止进程,避免业务中断。
学会进程管理,你就能彻底掌控Linux系统中所有运行的程序,不管是日常使用、服务运维,还是系统故障排查、性能优化,都能游刃有余。建议多动手实操文中的案例,把这些命令变成自己的“肌肉记忆”。
如果你觉得本文对你有帮助,欢迎点赞、推荐、转发,关注我,后续会分享更多Linux入门干货!
文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎