在Windows上使用Cygwin运行fork(2),可行吗?

5

我正在尝试使用一个叫做shotgun的Ruby gem,它需要fork(2)命令,我发现这是一个Linux命令,可能可以在Cygwin中使用。是否可能通过Windows命令行使其可用?

1个回答

7
在Cygwin下,fork(2)操作不是很顺畅,因为Windows进程模型不容易实现。Cygwin可能允许其生成使用它,但是您将遭受严重的性能损失,因为Cygwin必须手动模拟所有内容,包括复制可执行数据、复制打开的句柄等。
根据shotgun使用fork(2)的程度,这种模拟可能会很痛苦,也可能相对较小。
这里有一个关于Win32缺乏fork功能的好帖子。他们提出了一些我没有耐心或平台可访问性去调查的东西,但肯定听起来既有趣又危险,同时具有爆炸性:
“所以,您需要绕过Win32并调用本地API({Nt|Zw}CreateProcess)。书籍“Windows Nt/2000 Native Api Reference”中有一个示例“分叉Win32进程”。这可能是您需要的。”
我很感兴趣,但我怀疑Cygwin是否使用它。它可能存在,重申我的答案 - 许多Unix应用程序依赖于fork,而Cygwin可能使其可用。只是不要期望奇迹,并且您将不得不通过重新编译Ruby以包含其模拟层使其意识到Cygwin。

太好了,谢谢你的回复!我明天会尝试使用Cygwin仿真层重新编译Ruby。如果成功的话,那将是太棒了;即使有一些性能问题也没关系。另一条路听起来很冒险,而且需要大量的修改……但知道这是可能的也是好的。非常感谢! - picardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接