4_进程管理入门:看懂并控制 Linux 中的 “程序”
进程管理入门:看懂并控制 Linux 中的 “程序”
打开 Linux 后,你可能会好奇:“我没操作的时候,系统里到底在跑什么?” 其实此时有很多 “看不见的程序” 在后台运行 —— 比如管理网络的服务、处理日志的进程。这些 “正在运行的程序” 就是 Linux 里的 “进程”,学会管理它们,既能排查 “电脑卡顿” 问题,也能解决 “程序无响应” 的麻烦。今天这篇文章,带你从 “看懂进程” 到 “控制进程”,入门 Linux 进程管理的核心能力。
一、先搞懂:什么是进程?PID 和 PPID 又是什么?
简单说:进程就是 “正在运行的程序”—— 比如你打开的浏览器、终端里执行的命令,甚至系统自带的服务(如 Nginx、MySQL),都会以 “进程” 的形式存在于 Linux 中。
而每个进程都有两个关键标识,就像 “身份证号” 一样:
-
PID(Process ID,进程 ID):每个进程唯一的编号,Linux 通过 PID 区分不同进程(比如 PID=1234 的进程和 PID=5678 的进程,绝对不会重复);
-
PPID(Parent Process ID,父进程 ID):创建当前进程的 “父进程” 编号 ——Linux 里几乎所有进程都有 “父进程”(比如你在终端里执行
ls命令,终端进程就是ls进程的父进程)。
举个实际例子:打开终端,输入ps(查看当前终端的进程),会看到类似这样的内容:
  PID TTY TIME CMD
 1234 pts/0 00:00:00 bash # 终端的bash进程(父进程)
 5678 pts/0 00:00:00 ps # 当前执行的ps命令进程(子进程,PPID=1234)
这里bash进程的 PID 是 1234,ps进程的 PID 是 5678,而ps的 PPID=1234,说明ps是由bash进程创建的 “子进程”。
二、核心命令:3 个命令搞定 “查看→监控→关闭” 进程
管理进程的核心需求无非 3 个:“看有哪些进程”“实时监控进程状态”“关闭无响应的进程”,对应 3 个基础命令:ps(查看)、top(监控)、kill(关闭)。
1. ps:查看进程 ——“当前系统在跑什么?”
ps是 “Process Status” 的缩写,用来查看系统中的进程信息。新手不用记太多参数,重点掌握 2 个常用组合:
(1)查看当前终端的进程:ps(简单查看)
-
用法:直接在终端输入
ps,按回车; -
输出结果解读:
| 列名 | 含义 | 例子值 |
|---|---|---|
| PID | 进程 ID | 5678 |
| TTY | 进程关联的终端 | pts/0(当前终端) |
| TIME | 进程占用的 CPU 时间 | 00:00:00(刚启动) |
| CMD | 启动进程的命令 | ps |
- 场景:快速查看 “当前终端里正在运行的命令进程”(比如你执行的
ls、vim等)。
(2)查看系统所有进程:ps aux(全面查看)
-
用法:输入
ps aux(a显示所有终端的进程,u显示进程所有者,x显示无终端的后台进程); -
重点关注的列:
-
USER:进程的所有者(比如root是管理员进程,ubuntu是普通用户进程); -
PID:进程 ID(后续关闭进程要用); -
%CPU/%MEM:进程占用的 CPU 和内存百分比(找 “卡顿元凶” 就看这两列); -
COMMAND:进程对应的命令(比如/usr/sbin/nginx是 Nginx 服务进程)。
-
实战:查看 Nginx 进程状态
如果你在 Linux 上安装了 Nginx(Web 服务),想确认它是否在运行,用ps aux搭配grep过滤即可:
-
命令:
ps aux | grep nginx -
输出结果(如果 Nginx 在运行,会显示类似内容):
root 1234 0.0 0.1 12345 6789 ? Ss 10:00 0:00 nginx: master process /usr/sbin/nginx
www-data 5678 0.0 0.2 23456 8910 ? S 10:00 0:01 nginx: worker process
ubuntu 9012 0.0 0.0 34567 1234 pts/0 S+ 14:30 0:00 grep --color=auto nginx
- 解读:前两行是真正的 Nginx 进程(
master process是主进程,worker process是工作进程),最后一行是grep自己的进程,可忽略。如果没显示前两行,说明 Nginx 没启动,需执行sudo systemctl start nginx启动。
2. top:实时监控进程 ——“哪个进程在占资源?”
ps只能查看 “某一时刻” 的进程状态,而top能 “实时刷新” 进程信息,适合排查 “电脑卡顿”“CPU 占用过高” 的问题。
(1)基础用法:启动与退出
-
启动:终端输入
top,按回车,会进入实时监控界面(默认每 3 秒刷新一次); -
退出:按
q键(不要直接关终端,避免界面混乱)。
(2)关键操作:排序与筛选
在top界面里,用以下按键能快速找到 “问题进程”:
-
按
P(大写):按 CPU 占用率从高到低排序(找 “吃 CPU” 的进程,排在最上面的就是); -
按
M(大写):按内存占用率从高到低排序(找 “占内存” 的进程); -
按
k(小写):输入 PID 后按回车,再输入9(强制关闭信号),可直接关闭指定进程(不用退出top)。
界面解读(新手重点看这几部分):
top - 14:35:20 up 2 days, 1:20, 2 users, load average: 0.06, 0.08, 0.05
Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8169456 total, 6543210 free, 876543 used, 750003 buff/cache
KiB Swap: 8388604 total, 8388604 free, 0 used. 7012345 avail Mem 
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
 5678 www-data 20 0 234560 18900 12345 S 0.3 0.2 0:01.23 nginx  
 1234 root 20 0 123456 9876 8765 S 0.0 0.1 0:00.56 nginx  
-
第一行:系统时间、运行时长、登录用户数、负载(
load average后三个数分别是 1/5/15 分钟负载,数值越小越流畅); -
第二行:进程总数(
Tasks),1 个运行中(running),188 个休眠(sleeping),没有僵尸进程(zombie,僵尸进程多了会占资源,需清理); -
第三行:CPU 占用情况(
us是用户进程占用,sy是系统进程占用,id是空闲 CPU,id越高说明 CPU 越闲); -
下面列表:进程详情,和
ps aux类似,按排序后的顺序显示。
3. kill:关闭进程 ——“无响应的程序怎么关?”
当遇到 “浏览器卡住”“命令执行后一直没反应” 的情况,就需要用kill命令关闭对应的进程。kill的核心是 “通过 PID 向进程发送信号”,常用信号有 2 个:
| 信号编号 | 信号含义 | 用法场景 | 命令格式 |
|---|---|---|---|
| 15 | 正常终止(默认信号) | 让进程 “优雅退出”(保存数据后关闭) | kill 进程PID(默认发 15 信号) |
| 9 | 强制终止 | 进程无响应时,强制杀死进程 | kill -9 进程PID |
实战:关闭无响应的浏览器进程(以 Firefox 为例)
-
先找到 Firefox 的 PID:用
ps aux | grep firefox,假设输出 PID=7890; -
先尝试 “正常关闭”:
kill 7890(发送 15 信号),等待 3-5 秒,看浏览器是否关闭; -
如果没关闭(无响应),再 “强制关闭”:
kill -9 7890(发送 9 信号),此时浏览器会立即关闭(注意:强制关闭可能丢失未保存的内容); -
验证:再输
ps aux | grep firefox,如果没有 Firefox 进程,说明关闭成功。
避坑提醒:不要随便用
kill -9!优先用
kill(默认 15 信号),给进程保存数据的时间;只有确认进程完全无响应时,再用
kill -9。
三、实战技巧:让命令 “后台运行”,并切换前后台
有时候执行的命令会 “占用终端”—— 比如用python -m http.server启动一个临时服务器,终端会一直显示日志,无法输入其他命令。这时候就需要让命令 “后台运行”,还能随时调回前台,核心靠 “&”“jobs”“fg”“bg” 这几个工具。
1. 用 “&” 让命令后台运行
-
用法:在命令末尾加
&,按回车,命令会在后台执行,终端会释放出来,能继续输入其他命令; -
例子:启动临时 HTTP 服务器并后台运行:
python -m http.server 8080 &
\[1] 10111 # \[1]是后台进程的“作业号”,10111是进程PID
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
- 解读:
[1]代表这是第一个后台作业,10111是该进程的 PID,此时终端可以正常输入其他命令(比如ls、cd),服务器在后台继续运行。
补充技巧:如果命令会输出很多日志(比如服务器日志),可以用
nohup配合
&,让后台进程 “断开终端也不停止”:
nohup python -m http.server 8080 &
日志会保存在当前目录的nohup.out文件里,即使关闭终端,服务器依然在运行。
2. 用 “jobs” 查看后台进程
-
用法:终端输入
jobs,按回车,会显示当前终端所有后台运行的进程(作业); -
例子:假设后台有 HTTP 服务器和一个脚本进程,
jobs输出如下:
jobs
\[1]- Running nohup python -m http.server 8080 &
\[2]+ Stopped sh test.sh
-
解读:
-
[1]/[2]是作业号; -
Running表示进程正在运行,Stopped表示进程暂停; -
+代表 “当前默认作业”,-代表 “次默认作业”(后续用fg/bg时,默认操作+标记的作业)。
-
3. 用 “fg” 把后台进程调到前台
-
用法:
fg 作业号(如果不写作业号,默认调+标记的作业); -
例子:把刚才的 HTTP 服务器(作业号 1)调到前台:
fg 1
nohup python -m http.server 8080 # 此时服务器回到前台,终端被占用
- 如何暂停前台进程:如果想再次把它放到后台,先按
Ctrl+Z(暂停进程),终端会提示[1]+ Stopped nohup python -m http.server 8080,此时进程处于暂停状态。
4. 用 “bg” 让暂停的后台进程继续运行
-
用法:
bg 作业号(把Ctrl+Z暂停的进程恢复为后台运行); -
例子:把刚才暂停的 HTTP 服务器(作业号 1)恢复后台运行:
bg 1
\[1]+ nohup python -m http.server 8080 & # 进程恢复后台运行
- 验证:用
jobs查看,会显示[1]- Running nohup python -m http.server 8080 &,说明进程已恢复后台运行。
四、新手避坑:3 个常见问题及解决方法
-
“kill 命令提示‘No such process’”——PID 输错了
解决:先确认 PID 是否正确,用
ps aux | grep 进程名重新查找(比如ps aux | grep firefox),注意不要把grep进程的 PID 当成目标进程的 PID。 -
“后台进程关闭终端后就停止了”—— 没加
nohup解决:后台运行命令时,优先用
nohup 命令 &,比如nohup sh ``test.sh`` &,这样即使关闭终端,进程依然会在后台运行。 -
“用 fg 调到前台后,想退出进程怎么办?”—— 按
Ctrl+C解决:进程在前台时,按
Ctrl+C会发送 “终止信号”(类似kill 15),让进程正常退出;如果进程无响应,按Ctrl+\(发送kill -9信号)强制退出。
总结:进程管理的 “123” 法则
-
1 个核心概念:进程是 “正在运行的程序”,用 PID(唯一标识)和 PPID(父进程标识)区分;
-
3 个核心命令:
ps查看进程、top实时监控、kill关闭进程(优先kill PID,无响应再kill -9 PID); -
3 个实用技巧:
&后台运行命令、jobs查看后台作业、fg/bg切换前后台。
掌握这些内容,你就能轻松应对 “查看服务是否运行”“关闭无响应程序”“后台运行脚本” 等日常场景。

浙公网安备 33010602011771号