跳到内容

元数据卡

  • 前置知识:程序与文件的概念(上一页)
  • 预计时间:10 分钟
  • 完成标志:能区分程序和进程,能用 ps aux 查看进程

你的进度

"好了,我们知道程序是一个文件——躺在硬盘上的图纸。那怎么让它活过来?"

工坊主人把计算器图标放在桌上,指了指它。"这张图纸你拿到了。现在告诉我,你能用它敲钉子吗?"

你摇头。"除非……你把它做成锤子?"

"对!"他一拍桌子,"从图纸到锤子,需要一个步骤:拉一下手柄。双击鼠标,拉一下。"

你双击了计算器图标。操作系统做了几件事。


程序变成了进程

  1. 在硬盘上找到 calc.exe 这个文件
  2. 读取它的内容——那一长串机器指令
  3. 在内存里划出一块区域
  4. 把指令复制进去
  5. 准备一个"控制面板"记录它的一切(进程 ID、状态、占用资源)
  6. 让 CPU 开始执行第一条指令

那一刻,程序变成了进程

程序是静态的,进程是动态的。书关着是程序,打开在读是进程。

bash
# 查看当前运行的所有进程
ps aux

# 预期输出(简化):
# USER PID %CPU %MEM START TIME COMMAND
# steven 1234 0.1 2.3 10:00 0:02 /usr/bin/gnome-terminal
# steven 5678 0.0 0.5 10:05 0:00 /usr/bin/calc
#
# PID = 进程 ID,操作系统给每个进程的唯一编号

语言:Shell (Bash) 如何运行:输入 ps auxps aux | head -20预期输出:所有正在运行的进程列表,包含 PID、CPU/内存使用情况 你试试:在另一个窗口打开一个程序,再跑一次 ps aux,看看多了哪一行

Windows 替代Get-Process(PowerShell)或打开任务管理器(Ctrl+Shift+Esc)

看到那个 PID 了吗?它叫进程 ID,是操作系统给每个进程的身份证号。你在工坊的后续冒险中会大量用到它——查、杀、看、跟踪。

内存是工作台

"好的,程序变成进程了。那进程住在哪?"

工坊主人把你带到一面工具墙前。墙上挂着各种工具——螺丝刀、扳手、钳子——整整齐齐。

"这是我的工作台。每次干活的时候,我把需要的工具从柜子里拿出来放到台面上。用完了再放回去。柜子大但麻烦——你得走过去翻。台面就在手边,但地方就那么大。"

"进程也一样。它需要一个工作台。"

内存是进程的工作台。操作系统把程序的指令从硬盘复制到内存,然后 CPU 开始一条一条地拿取指令来执行。

bash
# 查看系统的内存使用情况
free -h

# 预期输出:
# total used free shared buff/cache available
# Mem: 15Gi 5.2Gi 3.1Gi 512Mi 6.7Gi 9.1Gi
# Swap: 2.0Gi 0.0Gi 2.0Gi

语言:Shell (Bash) 如何运行:输入 free -h(-h 表示人类可读格式) 预期输出:内存总量、已用、空闲、可用等情况 你试试:开一个大程序(或很多浏览器标签页)后再运行,观察变化

Windows 替代:任务管理器 → 性能 → 内存

这里有两个关键点:

  1. 内存是有限的。15GB 总内存,开几个大程序就会用完。不够时操作系统会"交换"(swap)——把暂时不用的数据挪回硬盘。内存不够时电脑会变慢。

  2. 每个进程有自己的内存空间。A 程序不能直接访问 B 程序的内存。这是操作系统强制保护的安全机制——如果一个程序崩溃了,不会带走其他程序。


常见陷阱

一个进程占满了一个 CPU 核

你的电脑风扇狂转,但只看到一个进程在拼命跑。这不是病毒——更可能是程序写了死循环。

在 top 里按 P 按 CPU 排序,找到 PID,然后用 kill <PID> 杀掉它:

bash
kill 12345 # 12345 换成实际进程号

如果杀不掉,加 -9。但优先用不带参数的 kill——它让进程有清理的机会。

深入:父子进程和僵尸

你现在不需要深入理解这些,但至少知道它们存在:

  • 父子进程:一个进程可以创建子进程。你在终端里运行 ls,终端进程会创建一个子进程来执行 ls
  • 信号kill 不只"杀死"进程,它在发送信号。kill <PID> 发送 SIGTERM(请求优雅终止),kill -9 发送 SIGKILL(强制杀掉)。

旅人笔记

程序是硬盘上存着的文件,静态不动;进程是运行起来的程序,动态、有 ID 编号、占内存和 CPU。内存是进程的工作台,有限、快速、独立隔离。

六个字:程序 → 进程 → 运行

下一步:操作系统与并发

一台电脑能同时运行几十个进程——可你的 CPU 只有几个核。这是怎么做到的?

看操作系统怎么演戏 →

Built with VitePress | Software Systems Atlas