我正在跟踪 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 免受竞争条件的影响?