加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:15:24 所属栏目:安全 来源:网络整理
导读:我理解fork,vfork,exec,execv,execp之间的区别.所以请不要咆哮. 我的问题是关于unix进程创建的设计.为什么设计师会想到创建两个单独的调用(fork和exec)而不是保持一个紧密调用(spawn). 良好的API设计是一个原因,以便开发人员能够更好地控制流程创建吗? 是因
我理解fork,vfork,exec,execv,execp之间的区别.所以请不要咆哮.
我的问题是关于unix进程创建的设计.为什么设计师会想到创建两个单独的调用(fork和exec)而不是保持一个紧密调用(spawn).
良好的API设计是一个原因,以便开发人员能够更好地控制流程创建吗?
是因为性能原因,我们可以延迟为子进程分配进程表和其他内核结构,直到写入时复制或访问时复制?
主要原因可能是fork()和exec()步骤的分离允许使用其他系统调用来完成子环境的任意设置.例如,您可以:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读