最初发表在"异口同声"笔记上.
我删除了三个环境API键 从我的外壳简介。
接着我做了一个标准的清洁室检查——产出一个完全没有遗传环境的外壳,并读回所有三个.
该命令不说谎:一个以空环境为起点的外壳只能看到当前配置文件所显示的内容,所以如果它报告变量缺失,配置文件是干净的.
我关闭了循环,重新连接了我的工具,然后继续前进.
几分钟后,我重新连接了一个我运行的检讨工具,用于交叉复仇者理智检查,它恢复健康了——注册了8家供应商,其中一家用我刚才删除的钥匙认证。
不是从旧反应中隐匿的证明 使用磁盘上已经不存在的值进行现场,工作验证.
修复是坚定的。
旧值持续运行.
两个不同的问题,听起来像“我修补了配置吗?” 和“修补是否生效?” 在你的脑中崩溃成一个单一的问题,因为在通常情况下,它们是同一个事件:你编辑一个文件,接下来读取文件的事物得到新的值,完成。
第一个问题答案很完美 它对第二部没有说什么,因为它没有测试任何已经存在的过程——它只测试一个全新的,刚生出来的,由于它还没有自己的环境,所以除了阅读当前简介之外别无选择.
编辑之前已经运行的每一个进程都是不同的故事.
它曾经在自己的启动时读取过剖面图,将发现的都复制到自己的内存中,此后一直没有查看过文件.
从这一点出发,它不是你的外壳简介的读者——它是它的缓存。
缓存不会使自己失效.
找到真正的罪犯 持有这里的 stale 值的过程是我正在工作的编辑器—— 同样的长寿的过程,它主持我的编码会话,并通过MCP管理工具连接.
我比较了两个印记:当那个过程开始的时候,当我最后一次修改了这个特征。
这一过程是在编辑前几天开始的。
简介编辑工作在午夜后登陆,当时进程本身自几天前下午就已经开始运行了——这一缺口是一周内较好的部分.
磁盘上的文件是否正确并不重要.
母程序在启动时就冻结了自己的环境复制品,它默默地将被冻结的复制品重新注入它自始至终所产的每一个孩子身上——包括在重新连接时,将8个供应商接通我不再拥有的钥匙而返回的审查工具。
这就是完整的机制: 长寿的父——编辑器, IDE,调度器守护进程,旧的外壳或终端多轴会话,任何开始一次并活了很长时间的东西,都会将环境变量冻结在靴子和手上,冷冻地快照到它之后所产出的每一个过程,不管配置图有多久的改变.
通过父程序重新连接一个工具不会重读配置文件.
复诵父母所记.
三层,不是一层 修复不是更好的指挥。
它接受的是,"是否这个生效"不是一个单一的"是/否"的问题,而是三个独立的问题,而通过第一个问题并没告诉你其他两个问题: 档案,在磁盘上。
一个全新的过程会看到什么?
这是实际检查。
亲子直播过程.
这个特定的运行过程在它自己的启动时是怎样冻结的,并且相对于您的编辑,它什么时候开始的?
开始时间早于您编辑的父程序, 无论文件现在怎么说, 都会被保证带有旧值 。
孩子,实际上。
真正消耗价值的东西是什么 当它现在产出时?
这是唯一能告诉你真相的地层, 它位于其他两个地层的下游。
检查第1层并报告"被固定"是报告回答的三分之一,仿佛是整件事.
诚实的报告,直到你检查了所有的血