我查看了posix-spawn(https://github.com/rtomayko/posix-spawn)的代码,似乎它在低级实现中使用了vfork。但是,不鼓励在linux平台上使用vfork。 posix-spawn 模块可以吗?
问问题
694 次
1 回答
5
vfork
不推荐,因为它严重限制了新进程可以做什么(直到它exec
),因此很难正确使用。在 Linux 上,fork
使用写时复制语义,因此fork
无需使用vfork
. 此外,vfork
信号语义不是跨平台的标准。来自man vfork
:
不幸的是,Linux 从过去复活了这个幽灵。BSD 手册页指出:
当实施适当的系统共享机制时,将消除此系统调用。用户不应依赖
vfork
() 的内存共享语义,因为在这种情况下,它将成为fork(2)
.信号处理的细节是模糊的,并且在系统之间有所不同。BSD 手册页指出:
为了避免可能的死锁情况,a 中间的子进程
vfork()
永远不会发送SIGTTOU
或SIGTTIN
发出信号;相反,ioctl
允许输出或 s 并且输入尝试会导致文件结束指示。
也就是说,如果使用得当,vfork
它会很有用,并且在许多其他平台上会更快。Linux 确实支持它,所以只要代码不做任何受 限制的事情vfork
,它在 Linux 上应该没问题。
于 2012-10-21T03:01:01.480 回答