gpt4 book ai didi

unix - 为什么 fork 和 exec 保持 2 个单独的调用

转载 作者:行者123 更新时间:2023-12-04 02:13:34 27 4
gpt4 key购买 nike

我了解 fork、vfork、exec、execv、execp 之间的区别。所以请不要对此大发雷霆。
我的问题是关于 unix 进程创建的设计。为什么设计者会考虑创建 2 个单独的调用( fork 和 exec )而不是保持一个紧密的调用( spawn )。
良好的 API 设计是否可以让开发人员更好地控制流程创建?
是因为性能原因,所以我们可以延迟将进程表和其他内核结构分配给子进程,直到写入时复制或访问时复制?

最佳答案

主要原因很可能是fork()的分离和 exec()步骤允许使用其他系统调用完成子环境的任意设置。例如,您可以:

  • 设置任意一组打开的文件描述符;
  • 改变信号掩码;
  • 设置当前工作目录;
  • 设置进程组和/或 session ;
  • 设置用户、组和补充组;
  • 设置硬和软资源限制;

  • ……还有更多。如果您要将这些调用合并为一个 spawn()调用,它必须有一个非常复杂的界面,才能对所有这些可能对 child 的环境进行编码——如果你添加了一个新的设置,界面就需要改变。另一方面,分开 fork()exec()步骤允许您使用普通系统调用( open()close()dup()fcntl() 、...)在 exec() 之前操纵 child 的环境.新功能(例如 capset() )很容易得到支持。

    关于unix - 为什么 fork 和 exec 保持 2 个单独的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090731/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com