Запуск форка (2) из ​​Windows с Cygwin. Возможный? - PullRequest
5 голосов
/ 29 ноября 2009

Я пытаюсь использовать рубиновый гем под названием shotgun, для которого требуется команда fork (2), которая, как я обнаружил, является командой Linux и может быть доступна в Cygwin. Можно ли сделать его доступным через командную оболочку Windows?

1 Ответ

7 голосов
/ 29 ноября 2009

fork(2) небезразличен в Cygwin, так как модель процессов Windows не позволяет легко этому случиться. Cygwin может разрешить своему спавну использовать его, но вы столкнетесь с серьезным ударом по производительности, поскольку Cygwin придется эмулировать все вручную - включая копирование исполняемых данных, копирование открытых дескрипторов и т. Д.

В зависимости от того, сколько дробовика использует fork(2), эта эмуляция может быть болезненной или относительно незначительной.

Вот хорошая ветка на GameDev.net , в которой обсуждается отсутствие возможности fork на Win32. Они поднимают что-то, чего у меня нет терпения или доступности платформы, чтобы исследовать, но, безусловно, звучит весело, опасно и взрывно одновременно:

Итак, вам нужно обойти Win32 и вызвать собственный API ({Nt | Zw} CreateProcess). В книге «Windows Nt / 2000 Native Api Reference» есть пример «Формирование процесса Win32». Это может быть то, что вам нужно.

Я заинтригован, но я сомневаюсь, что Cygwin использует это. Вероятно, он повторяет мой ответ на ваш вопрос - многие приложения Unix используют fork, и Cygwin, вероятно, делает его доступным. Просто не ожидайте чудес, и вам придется рассказать Ruby о Cygwin, перекомпилировав его для включения слоя эмуляции.

...