你可能会说:
- “文件都删了,为什么那个服务还在跑?”
- “关掉终端窗口,我启动的网站也就停了吗?”
它是什么
磁盘上的代码文件只是菜谱,运行起来才成为进程。进程启动时把需要的代码和数据读进内存,之后就按内存里的那份运行:你改了文件、甚至删了文件,已经在跑的进程并不知道。
这是"改了没生效"最常见的原因之一:页面其实来自一个旧进程,它还在用启动那天读进去的代码和数据。开发服务器会盯着文件变化自动重启,但一个在后台跑着的普通服务不会。
每个进程有一个编号(PID)。ps 列出正在运行的进程,lsof 查某个端口或文件被哪个进程占着,kill 进程号 让它退出。AI 帮你在后台启动的服务,用完也要记得关掉。
打个比方
像照着菜谱炒菜的厨师:菜谱撕了,锅里这盘菜照样炒完。想让他停下,得去找他本人。
在这个网站里
兄弟项目 E2E Review 的一个本地模拟接口进程,在 7 月启动时读进了当时的全部内容;后来它的脚本文件被删了,进程却一直活着,到 9 月还在返回 7 月的内容(第 2 课)。
容易搞混的地方
常见误解
删掉脚本文件,服务就停了
正确理解
文件删了,已经在内存里运行的进程不受影响。要停服务,得让进程退出。
常见误解
改了代码,刷新页面就能看到效果
正确理解
只有会自动重载的开发服务器是这样。普通服务要重启进程,新代码才会生效。
你可以这样告诉 AI
复制下面这段,贴给你的 AI
你在后台帮我启动过哪些进程?列出它们的进程号、端口和启动命令。任务结束时把不再需要的进程停掉,并告诉我怎么确认它们已经退出。
接下来去哪
先知道
- 端口——一台电脑上区分不同服务的编号:地址把请求送到这台电脑,端口号决定交给哪个程序。
接着看
- 环境变量——程序启动时从运行环境里读取的配置,比如数据库地址、密钥、端口。同一份代码,换一套环境变量就换一种行为。
在这些课里出现
相关的真实事故