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
切换前后台。
掌握这些内容,你就能轻松应对 “查看服务是否运行”“关闭无响应程序”“后台运行脚本” 等日常场景。