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

前端之家收集整理的这篇文章主要介绍了unix – 为什么fork和exec保持2个单独的调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我理解fork,vfork,exec,execv,execp之间的区别.所以请不要咆哮.
我的问题是关于unix进程创建的设计.为什么设计师会想到创建两个单独的调用(fork和exec)而不是保持一个紧密调用(spawn).
良好的API设计是一个原因,以便开发人员能够更好地控制流程创建吗?
是因为性能原因,我们可以延迟为子进程分配进程表和其他内核结构,直到写入时复制或访问时复制?
主要原因可能是fork()和exec()步骤的分离允许使用其他系统调用来完成子环境的任意设置.例如,您可以:

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

……还有更多.如果要将这些调用组合到一个spawn()调用中,则必须具有非常复杂的接口,以便能够对子环境中所有这些可能的更改进行编码 – 如果您添加了新设置,则界面需要改变.另一方面,单独的fork()和exec()步骤允许您使用普通系统调用(open(),close(),dup(),fcntl(),…)来操纵子环境之前exec().可以轻松支持功能(例如capset()).

猜你在找的Bash相关文章