Запуск fork (2) из Windows с помощью Cygwin. Возможно?


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

1 5

1 ответ:

fork(2) это kludgey под 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, перекомпилировав его, чтобы включить его эмуляционный слой.