我已经查看了posix-spawn(https://github.com/rtomayko/posix-spawn)的代码,似乎它在低级实现中使用了vfork。但是,不鼓励vfork在linux平台中使用。使用posix它没关系-spawn模块?
答案 0 :(得分:5)
vfork
,因为它会严重限制新进程可以执行的操作(直到exec
s)并因此难以正确使用。在Linux上,fork
使用写时复制语义,因此fork
速度相当快,无需使用vfork
。此外,vfork
信号语义在各个平台上都不是标准的。来自man vfork
:
令人遗憾的是,Linux从过去恢复了这个幽灵。 BSD手册页指出:
当实施适当的系统共享机制时,将取消此系统调用。用户不应该依赖
vfork
()的内存共享语义,因为它会与fork(2)
同义。信号处理的细节不明确,系统之间也有所不同。 BSD手册页指出:
为了避免可能的死锁情况,
vfork()
中间的子进程永远不会发送SIGTTOU
或SIGTTIN
信号;相反,允许输出或ioctl
s,输入尝试将导致文件结束指示。
也就是说,如果使用得当,vfork
可能会有用,而且在许多其他平台上它会更快。 Linux确实支持它,所以如果代码不做任何受vfork
限制的事情,那么在Linux上应该没问题。