Linux 进程管理入门

发布于 2025-09-04 分类: Linux

进程管理:做 Linux 系统的交通警察

Linux 通常是一个非常稳定的系统。但偶尔,程序可能会卡死,或者我们希望调整系统资源的分配。这时,我们就需要化身为系统的“交通警察”,对运行中的程序(也就是“进程”)进行管理。本篇教程将带你快速掌握这项核心技能。

什么是进程?

我们可以把“程序”比作一份菜谱,它记录了制作一道菜的所有步骤。而“进程”则是你正在根据这份菜谱做菜的那个行为。当你运行一个程序时,系统会把菜谱(指令)加载到内存里,并为你准备好锅碗瓢盆(变量空间等资源)。这个正在运行、占用着系统资源的实例,就是进程。

系统里正在忙些什么?

Linux 是一个多任务操作系统,意味着许多进程可以同时运行。除了你自己启动的程序,系统本身和其他用户(如果有多用户的话)也会运行各种进程。想知道当前系统有多“热闹”,我们可以使用 top 命令。

top

top 命令会打开一个实时动态的“仪表盘”,让你对系统状态一目了然。下面是一个简化版的输出示例:

top
Tasks: 174 total,   3 running, 171 sleeping,   0 stopped
KiB Mem: 4050604 total, 3114428 used,   936176 free
Kib Swap: 2104476 total,   18132 used,  2086344 free

  PID USER      %CPU %MEM COMMAND
 6978 ryan       3.0 21.2 firefox
 11   root       0.3  0.0 rcu_preempt
 6601 ryan       2.0  2.4 kwin
...

我们来解读一下关键信息:

  • 第 2 行 (Tasks):任务(Tasks)就是进程。这里显示了总进程数、正在运行的、休眠的等等。大部分进程处于“休眠 (sleeping)”状态是完全正常的,它们只是在等待某个事件发生时才被唤醒。
  • 第 3 行 (Mem):这是物理内存(RAM)的使用情况。Linux 会把最近用过的东西缓存在内存里以提高速度,所以 used 占用高并不一定是坏事。当新程序需要内存时,系统会自动清理缓存。
  • 第 4 行 (Swap):这是交换分区(虚拟内存)的使用情况。如果这里的使用率持续很高,可能意味着你的物理内存不太够用。
  • 进程列表:下面是按资源占用率(默认是 CPU)排序的进程列表,它会实时刷新。
    • PID: 进程 ID (Process ID),每个进程独一无二的身份证号。
    • USER: 运行该进程的用户。
    • %CPU: 进程占用的 CPU 百分比。
    • %MEM: 进程占用的物理内存百分比。
    • COMMAND: 进程的命令名。

如果只想看一眼系统当前的进程“快照”而不是实时监控,可以使用 ps (processes) 命令。单独使用 ps 只会显示当前终端的进程,没什么用。我们通常使用 ps aux 来查看系统上所有的进程。

ps aux

因为 ps aux 的输出非常多,我们常常会结合 grep 命令来筛选出我们关心的特定进程。

如何终止“失控”的进程?

程序偶尔会崩溃或无响应,比如浏览器突然卡住,无法关闭。别担心,我们可以手动“终结”它。

假设 Firefox 浏览器卡死了,我们需要两步来解决它:

第一步:找到它的 PID

我们用 ps aux 配合 grep 来查找 Firefox 进程的身份证号(PID)。

ps aux | grep 'firefox'

输出可能像这样:

ryan   6978  8.8 23.5 2344096 945452 ? Sl 08:03 49:53 /usr/lib64/firefox/firefox

ryan 后面的那个数字 6978 就是 Firefox 进程的 PID。

第二步:执行“击杀”命令

我们使用 kill 命令,并带上我们找到的 PID。

kill <PID>

我们先尝试“礼貌地”通知它退出:

kill 6978

这个命令会发送一个默认的“请退出”信号。这是首选方式,因为它给了程序一个机会去完成清理工作再关闭。但有时,顽固的进程会忽略这个请求。我们可以再次用 ps aux | grep 'firefox' 检查它是否还在。如果还在,我们就需要动用“王炸”了。

kill -9 6978

-9 信号是一种强制终结令,它会像一把大锤,不由分说地将进程彻底清除。普通用户只能 kill 自己的进程,而 root 用户可以 kill 系统上任何一个进程。

实战技巧:桌面卡死了怎么办?

极少数情况下,一个崩溃的程序可能会导致整个图形桌面都失去响应。此时,还有一个“秘密通道”可以救你。

Linux 默认运行着多个虚拟控制台。我们平时看到的图形界面通常在第 7 个控制台。当图形界面卡死时,我们可以尝试切换到其他纯文本的控制台来解决问题。

  • 按下 Ctrl + Alt + F2 (或者 F3, F4, F5, F6)

如果成功,你会进入一个黑底白字的登录界面。登录后,你就可以像上面那样使用 pskill 命令来查找并终止那些高 CPU 或高内存占用的可疑进程了。解决问题后,按下 Ctrl + Alt + F7 (或者 F1,取决于你的发行版) 就可以尝试切回图形界面。

前台任务与后台任务

我们平时在终端里运行命令,命令执行时会占据终端,直到它完成我们才能输入新命令,这叫前台任务。但有些任务需要很长时间(比如编译代码、处理大文件),我们不希望一直干等着。这时就可以让它在后台运行

我们用 sleep 命令来演示,它只会等待指定的秒数。

sleep 5

你会发现终端被“卡住”了 5 秒,然后才返回提示符。现在,我们在命令末尾加上一个 & 符号,把它送到后台去:

sleep 5 &
[1] 21634

终端立即返回了提示符,并告诉你它创建了一个后台工作(Job),编号为 [1],进程ID为 21634。你可以继续做别的事情。大约 5 秒后,你按一下回车,终端会提示你 [1]+ Done sleep 5,表示后台任务已完成。

我们可以使用 jobs 命令查看当前有哪些后台任务。

我们还可以在前后台之间切换任务:

  1. 运行一个耗时任务,比如 sleep 30
  2. 在它运行时,按下 Ctrl + z
  3. 这个任务会被暂停 (Stopped) 并被放入后台。
  4. 使用 jobs 命令可以看到这个已暂停的任务。
  5. 使用 fg <job_number> (fg 是 foreground 的缩写) 可以把它重新带回前台继续运行。例如 fg 1

注意! 很多从 Windows 过来的人习惯用 Ctrl + z 来撤销,但在 Linux 终端里,它会把你的程序(比如 vi 编辑器)暂停并扔到后台。如果你发现程序“消失”了,别慌,用 jobs 看看,再用 fg 把它找回来就行。

核心命令总结

  • top
    : 实时动态地查看系统进程和资源占用情况。
  • ps
    : 给系统进程拍一张“快照”。常用组合是 ps aux
  • kill
    : 终止一个进程。先礼貌地尝试 kill <PID>,不行再用 kill -9 <PID>
  • jobs
    : 显示当前终端的后台任务列表。
  • & (加在命令末尾)
    : 让命令在后台运行。
  • Ctrl + z
    : 暂停当前前台任务,并将其移至后台。
  • fg
    : 将一个后台任务重新调回前台运行。

动手实践

现在轮到你了,打开终端试试吧:

  • 启动几个图形界面的程序(比如计算器、文本编辑器)。
  • 使用 ps aux | grep <程序名> 找到它们的 PID,然后用 kill 命令把它们关掉。
  • 尝试切换到 Ctrl + Alt + F2 虚拟控制台,在那里重复上面的操作。
  • 玩转 sleep 命令,练习使用 &jobsCtrl + zfg,感受前后台任务切换的乐趣。

-- 感谢阅读 --