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, перекомпилировав его для включения слоя эмуляции.