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
  • 场景:快速查看 “当前终端里正在运行的命令进程”(比如你执行的lsvim等)。

(2)查看系统所有进程:ps aux(全面查看)

  • 用法:输入ps auxa显示所有终端的进程,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 为例)

  1. 先找到 Firefox 的 PID:用ps aux | grep firefox,假设输出 PID=7890;

  2. 先尝试 “正常关闭”:kill 7890(发送 15 信号),等待 3-5 秒,看浏览器是否关闭;

  3. 如果没关闭(无响应),再 “强制关闭”:kill -9 7890(发送 9 信号),此时浏览器会立即关闭(注意:强制关闭可能丢失未保存的内容);

  4. 验证:再输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,此时终端可以正常输入其他命令(比如lscd),服务器在后台继续运行。

补充技巧:如果命令会输出很多日志(比如服务器日志),可以用

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 个常见问题及解决方法

  1. “kill 命令提示‘No such process’”——PID 输错了

    解决:先确认 PID 是否正确,用ps aux | grep 进程名重新查找(比如ps aux | grep firefox),注意不要把grep进程的 PID 当成目标进程的 PID。

  2. “后台进程关闭终端后就停止了”—— 没加nohup

    解决:后台运行命令时,优先用nohup 命令 &,比如nohup sh ``test.sh`` &,这样即使关闭终端,进程依然会在后台运行。

  3. “用 fg 调到前台后,想退出进程怎么办?”—— 按Ctrl+C

    解决:进程在前台时,按Ctrl+C会发送 “终止信号”(类似kill 15),让进程正常退出;如果进程无响应,按Ctrl+\(发送kill -9信号)强制退出。

总结:进程管理的 “123” 法则

  1. 1 个核心概念:进程是 “正在运行的程序”,用 PID(唯一标识)和 PPID(父进程标识)区分;

  2. 3 个核心命令ps查看进程、top实时监控、kill关闭进程(优先kill PID,无响应再kill -9 PID);

  3. 3 个实用技巧&后台运行命令、jobs查看后台作业、fg/bg切换前后台。

掌握这些内容,你就能轻松应对 “查看服务是否运行”“关闭无响应程序”“后台运行脚本” 等日常场景。

posted @ 2025-10-12 18:56  S&L·chuck  阅读(11)  评论(0)    收藏  举报