1

我查看了posix-spawn(https://github.com/rtomayko/posix-spawn)的代码,似乎它在低级实现中使用了vfork。但是,不鼓励在linux平台上使用vfork。 posix-spawn 模块可以吗?

4

1 回答 1

5

vfork不推荐,因为它严重限制了新进程可以做什么(直到它exec),因此很难正确使用。在 Linux 上,fork使用写时复制语义,因此fork无需使用vfork. 此外,vfork信号语义不是跨平台的标准。来自man vfork

不幸的是,Linux 从过去复活了这个幽灵。BSD 手册页指出:

当实施适当的系统共享机制时,将消除此系统调用。用户不应依赖vfork() 的内存共享语义,因为在这种情况下,它将成为fork(2).

信号处理的细节是模糊的,并且在系统之间有所不同。BSD 手册页指出:

为了避免可能的死锁情况,a 中间的子进程vfork()永远不会发送SIGTTOUSIGTTIN发出信号;相反,ioctl允许输出或 s 并且输入尝试会导致文件结束指示。

也就是说,如果使用得当,vfork它会很有用,并且在许多其他平台上会更快。Linux 确实支持它,所以只要代码不做任何受 限制的事情vfork,它在 Linux 上应该没问题。

于 2012-10-21T03:01:01.480 回答