首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么更新的glibc用vfork而不是posix_spawn来实现?

问为什么更新的glibc用vfork而不是posix_spawn来实现?
EN

Stack Overflow用户
提问于 2018-07-20 05:51:34
回答 1查看 1.2K关注 0票数 1

我正在用glibc 2.17和glibc 2.27跟踪posix_spawn源代码。

(glibc 2.17: sysdeps/posix/spawni.c)

(glibc 2.27: sysdeps/unix/sysv/linux/spawni.c)

我发现glibc2.17根据标志和文件操作使用v叉或fork。

我想这是由于多线程安全或比赛的情况。

但是在glibc 2.27中,它只使用vfork创建子进程。

为什么glibc会改变实现?

更新的linux内核是否能更好地防止争用条件的出现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 07:40:03

对于大型进程,vfork的效率要比fork高得多,因为地址空间根本不需要重复。最初,人们担心适当的取消处理将需要在文件操作出现时使用fork,但最终确定当前的vfork-based实现是足够的。

在qemu用户和微软的模拟中,vfork仍然是失效的,但是在使用posix_spawn时通常看不到but,因为它实际上并不使用vfork,而是使用带有单独堆栈的vfork-style clone系统调用,因此即使父进程没有正确暂停,子进程中的堆栈也不会受到破坏。

有背景资料的一些资源:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51435855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档