【发布时间】:2018-12-28 08:54:28
【问题描述】:
我正在跟踪 glibc 2.17 和 glibc 2.27 中的 posix_spawn 源代码。
(glibc 2.17:sysdeps/posix/spawni.c)
(glibc 2.27:sysdeps/unix/sysv/linux/spawni.c)
我发现 glibc 2.17 根据标志和文件操作使用 vfork 或 fork。
我猜这是由于多线程安全或竞争条件造成的。
但在 glibc 2.27 中,它只使用 vfork 来创建子进程。
为什么 glibc 会改变实现方式?
较新的 linux 内核是否能更好地保护 vfork 免受竞争条件的影响?
【问题讨论】:
-
这很好,但我想清楚地了解为什么 glibc 2.17 在有文件操作的情况下使用 fork 而为什么 glibc 2.27 没有。
标签: linux-kernel fork race-condition glibc vfork