5

我正在尝试使用一个名为 shotgun 的 Ruby gem,它需要 fork(2) 命令,我发现它是一个 Linux 命令,并且可能在 Cygwin 中可用。是否可以通过 Windows 命令外壳使其可用?

4

1 回答 1

7

fork(2)在 Cygwin 下很笨拙,因为 Windows 进程模型不允许它发生。Cygwin 可能允许它的派生使用它,但你将遭受严重的性能打击,因为 Cygwin 必须手动模拟所有内容——包括复制可执行数据、复制打开的句柄等。

根据shot弹枪的使用量fork(2),这种模拟可能会很痛苦,也可能相对较小。

这是GameDev.net 上的一个很好的帖子,讨论了 Win32 上缺乏fork设施。他们提出了一些我没有耐心或平台可访问性来调查的东西,但同时听起来很有趣、危险和爆炸性:

因此,您需要绕过 Win32 并调用本机 API ({Nt|Zw}CreateProcess)。“Windows Nt/2000 Native Api Reference”这本书有一个例子“Forking a Win32 Process”。这可能是您需要的。

我很感兴趣,但我怀疑 Cygwin 是否使用它。它可能就在那里,重申我对您问题的回答——许多 Unix 应用程序都依赖于fork,而 Cygwin 可能会使其可用。只是不要期待奇迹,您必须通过重新编译 Cygwin 以包含其仿真层来让 Ruby 了解 Cygwin。

于 2009-11-29T08:08:12.590 回答