为什么linux下要把创建进程分为fork()和exec()(一系列函数
发布网友
发布时间:2024-10-14 09:22
我来回答
共1个回答
热心网友
时间:1天前
Fork最早可追溯至1962年Melvin E. Conway的论文《A Multiprocessor System Design》,在这篇论文中,Conway提出Fork和Join两个并行原语,Fork用于分叉,Join用于聚集。在那篇文章中,Process一词与当前的“进程”概念并不相同。随后,GENIE分时系统实现了这一处理逻辑。
exec的起源源自早期Unix中Shell的运行方式。在启动用户程序时,Shell会直接将用户程序代码覆盖自身代码并清空内存,待执行完毕后,使用exit()重新初始化Shell代码。这样一来,运行用户进程前后Shell几乎无法保留任何信息。(这与80年代的家用电脑情况类似……DOS的INT 21/4B在处理COM时也大致相同。)
为解决这一问题,最简单的办法是将Shell的内存空间完全复制一遍再覆盖,Unix借鉴了GENIE分时系统中的Fork机制来完成此复制任务,这就形成了fork-exec二件套的由来。