有时,我的旧帖子会找到新的读者群,并产生新的兴趣。整个" fork()可能会失败" 2014年8月以来的事情在今年早些时候做了。它已经有6年的历史了,但仍然和以往一样有效。它仍然在某些场所也能带来THE ONE。
让我们谈谈这里发生了什么。基本情况是,我们有一个库调用最终会执行某种系统调用,并且该系统调用可能会失败。考虑到fork-the-library-call可能调用fork-the-syscall,这实际上有点有趣。它很有可能会改为调用clone(),特别是在过去使用glibc的Linux上,大约15年左右。
不管它是派生的,克隆的还是内核中的其他任何东西,这里重要的是它不能保证成功。相反,如果您在足够的情况下运行足够长的时间,最终将使其失败。如果您有足够的机器,它甚至不会花那么长时间。您会找到一种方法。
从2014年8月那个星期五早上开始的情况是整个设备的内存不足,但这并不是解决问题的唯一方法。您也可以达到容器限制,因为现在完全是一件事情。或者,这真的很有趣-您实际上可能用完了pid。是的可以将其视为等效于短暂端口用尽的过程级别(这是另一个故事)。
考虑到这种可能性,您会认为我们会将各种与计算机相关学科的学生发送到世界,而他们知道它可能发生,将要发生并且必须加以处理。不幸的是,读者的反馈和我自己的研究表明情况并非如此。
我在9月份写了一篇关于这件事的文章,其中讲了一个故事,内容涉及在事后会议中我因中断而因可能因您居住在美国或加拿大而使用的某种东西而进行的真实对话。在其中,一些人确认他们并不需要检查返回值,因为它不应该中断,并且它使代码成为可能。凌乱的。
几天后,我听到有人在他们的教科书中遇到过类似的感觉。看一下这个。
嘿!我正在阅读您在"您对检查返回值有何看法?几个小时后,我在教科书中遇到了这个问题,程序员应该始终检查错误,但是不幸的是,许多程序会跳过错误检查,因为它会使代码blo肿,并使代码难以阅读。"所以我猜这比我预期的更普遍吗?在某处工作时是否应将其视为危险信号?
当我读到这篇文章时,我很震惊。这是一本教科书中的一句话,来自一位正在影响令人印象深刻的思想的作者,负责使人们正确,以期选出那些希望在自己的职业生涯中不会创建完全糟糕的代码的人。他们可能说过类似的话,因为许多程序员认为它会使代码blo肿,但是请注意它是如何编写的:因为它使代码blo肿。对我来说,这听起来像是作者的同意。
太可怕了!我与向我发送该反馈并发现是的人进行了通讯,正如您所愿,它实际上是“计算机系统:程序员的视角3 / E(CS:APP3e)”发现您是否要在网上搜索他们引用的摘录。这是一本书,已经在多所学校使用,并且就在那里。
但是等等,还有更多。让我们扩大范围,而不是仅仅依靠这本书和作者。尝试以下操作:转到您最喜欢的搜索引擎,并搜索调用fork()的代码。许多具有某种操作系统或系统体系结构课程的学校都会在线提供课程提纲,幻灯片或什至笔记,您可能会大受欢迎。
然后加载其中一些页面,然后查看您发现的内容。我敢打赌,您将找到一堆地方进行测试,以查看pid是否为零,如果是,则为孩子,否则为父。
撤回(以及因此" pid")可能为负(表示失败)这一事实完全被忽略了。该程序会继续前进,执行任何操作,以及是否使用了非-pid" pid"程序。变量,以便稍后发送信号,嘿,事情变得非常有趣!
我第一次这样做,实际上是去邮寄了最热门歌曲背后的教授。我知道地址为.edu的人会收到各种各样的rando wingnut邮件,所以我希望这很简单,希望他们能把所有的问题联系起来并加以清理。我在10月底寄出了这封邮件,虽然我确实得到了不错的感谢,但也要感谢小费。响应,页面本身仍然存在。换句话说,互联网上有人错了!什么?哦对不起。
确实,这无处不在。不只是那一类。不只是一所学校。它显示在各处。有关此类内容的绝大多数页面都试图错误地传达它。很明显,不仅是马从谷仓里出来了,猫也从书包里掏了出来,整个那该死的动物园都被割断了,并在百老汇歌唱表演中奔走。当以这种方式实施正确的事情时,您只是无法期望人们会做正确的事情。太多的人用脚投票,并下令他们不要检查,无论发生什么,都会发生。
我非常确定,摆脱这种混乱局面的唯一方法就是忘掉曾经期望过的正确行为"来自大多数在这种编程环境中走过弯路的人。就像,是的,您可以做正确的事,并且可以使每个t交叉,每个点……小写j的实体变得坚固,并且遇到一些崎road不平的道路时通常不会掉落。
但是实际上,这很明显:期望现在发生这种情况纯属疯狂。它一遍又一遍地做同样的事情,并期待不同的结果。如果您想真正削减开支,可以追溯到2011年7月,然后再说一遍,如果有太多用户错误,那可能是您的错。
很简单,我不认为我们可以默认使用这些脚枪来信任人们。随处看看证据。
我一头雾水就没有一个好的答案。我认为我需要首先解决问题,以便车轮可以开始转动。我不认为人们只是*意识到*为什么*会发生这种情况,以及为什么会出现这种情况。涉及代码正确性和处理不愉快路径的事情。
我能说什么大多数人不应该编程吗?哦,那我是一名精英人士,并且是看门人,更糟糕的是,因为我显然不会将自己纳入该组织,对吧?
我们应该把一些语言带出棚子并开枪射击吗?那么,我们必须对所有人都这样做,因为他们以自己的方式都非常糟糕。这里没有人没有什么道德上的高地。其中包含您的宝贵小语言。你也是。
有要编写的程序,而我们创建程序的所有选择都以一种或另一种方式破坏了。 这意味着不管喜欢与否,人们会继续这样做,并且会不断遇到麻烦。 您知道那条旧锯所见到的,如果我们像编写程序那样建造建筑物,那么第一只啄木鸟会毁灭社会吗? 在这种类比的编程方面,没有人提到过WE是啄木鸟。 它不是来找您的随机鸟。 首先是将它们组合在一起的人。 让我们看看是否至少可以承认我们都有问题。 然后,也许我们可以尝试对此做些事情。