第56期 | 先复印,再换魂:exec 的另一半故事

操作系统 · · 九羲科技

一、先复印,再换魂

两步走的进程诞生术:前两期讲了 fork 怎么复印(第54期一次调用两次返回,第55期写时才复印)。但复印只是上半场。1974 年,Ritchie 和 Thompson 的论文里,fork 的搭档叫 exec¹:它把子进程的整个内存映像换掉,PID 不变。如蝉蜕——壳换了,蝉还是那只蝉。

为什么非要分两步?答案在 fork 与 exec 之间的那道缝里。shell 的重定向魔法,全在这道缝里变的:fork 之后、exec 之前,子进程 open 一个文件——按"新打开的文件拿最小未用描述符"的约定¹,stdout 就被悄悄换成了那个文件。然后 exec,新程序一出生就对着文件说话。内核只给了"复印"这个最小机制,"给孩子布置一个什么样的世界"——策略,全留给用户在缝里亲手做。

三十年后才有人把缝封上。2001 年,POSIX 出了 posix_spawn²,一步到位;2019 年,Linux 出了 clone3³。但 spawn 只是把"布置"改成了申报制(file_actions 表格),方便了,自由度也没了。没人敢真把那道缝焊死——焊死了,shell 的魔法就没地方施了。

发展性研究那一问,又有新答案。spawn 的主意不是新原理,别家系统早就有;Unix 的赢面,是把"两步加一道缝"工程化成了组合的源泉。

照见一层平时看不见的。fork+exec 把"诞生"拆成复制与替换,系统故意在中间留白——内核不管你给孩子布置什么样的世界,只保证复印正确。权力下放的地方,往往就是魔法生长的地方。

二、意图即诞生,AI OS 里没有 exec

如果 AI 的操作系统先出现,"诞生"这个动作里不会有 exec——agent 派生子 agent,分叉的是上下文:目标、记忆摘要、工具权限。没有"代码映像"可换,"魂"就是上下文本身,分叉时一起带走,何须再换一次?

2008 年的 Android 已经打了个样⁴:Zygote 开机时预热好整个运行时,此后每个应用都是 fork 出来,没有 exec。预热一次,分叉无数次。

那道缝,在 AI OS 里会变成"意图注入"。派生 = 从预热快照分叉 + 写入任务意图。fork 管"有",缝里管"成为什么":装哪些工具权限、挂哪段记忆、设多少资源上限——全在缝里写。

范式之眼补一句。fork 复制的是线性地址空间,是给顺序指令流设计的页表。agent 的"地址空间"是上下文窗口与 KV cache,分叉的单位不再是 4KB 页,而是一段可共享的记忆前缀——上一期 PagedAttention 动的手,正是这一刀。

三、今晚,亲眼看那道缝

手边任何一台 Linux 机器,今晚就能亲眼看见 fork 与 exec 之间的那道缝。

strace -f -e trace=%process,openat bash -c 'echo hi > /tmp/seam',看输出:openat("/tmp/seam"...) 出现在 execve 之前。shell 在子进程里先打开文件、换掉 stdout,然后才 exec——重定向不是 exec 的参数,是缝里亲手布置的。

落点。如果你在给企业做本地 AI 推理或智能体:模型权重常驻内存,就是 Zygote 式预热——每路请求分叉共享的 KV 前缀,不必每次冷启;内存吃紧的边缘设备上,跑 agent 也别每次冷加载模型,常驻一个预热好的 agent 快照,子任务从它分叉;任何"派生子任务"的接口设计,都学 fork+exec——拆成"分叉"与"意图注入"两步,中间留缝装权限、挂记忆、设上限,别做成黑盒 spawn。

觉 然 小 注

「是法平等,无有高下。」⁵(思想化用)

fork+exec 与 spawn,无高下,各从其用。Unix 选了两步走,不是一步到位不好——是那道缝里,长出了 shell 的全部魔法。

引 用 与 出 处

  1. [1] Ritchie, D. M. & Thompson, K. The UNIX Time-Sharing System. Communications of the ACM, 1974. https://doi.org/10.1145/361011.361061
  2. [2] posix_spawn(3) — Linux man page. POSIX.1-2001, glibc 2.2. https://man7.org/linux/man-pages/man3/posix_spawnp.3.html
  3. [3] clone3(2) — Linux man page. 首次出现在 Linux 5.3. https://manpath.be/f34/2/clone3
  4. [4] Android OS Architecture, Part 5: The Zygote Process. HackerNoon. https://hackernoon.com/android-os-architecture-part-5-the-zygote-process
  5. [5] 鸠摩罗什 译. 《金刚般若波罗蜜经》第二十三品"净心行善分". 后秦弘始年间(约402年)译本. ("是法平等,无有高下",思想化用)

· · ·

← 返回资讯中心