2009-11-29 12 views
5

Sto cercando di utilizzare una gemma Ruby chiamata shotgun che richiede il comando fork (2) che ho scoperto è un comando Linux e potrebbe essere disponibile in Cygwin. È possibile renderlo disponibile tramite la shell dei comandi di Windows?Running fork (2) da Windows con Cygwin. Possibile?

risposta

7

fork(2) è kludgey in Cygwin, poiché il modello di processo di Windows non consente facilmente che si verifichi. Cygwin può consentire al suo spawn di usarlo, ma subirai un grave colpo di prestazioni poiché Cygwin deve emulare tutto a mano, inclusi copiare i dati eseguibili, copiare gli handle aperti, ecc.

A seconda di come molto shotgun utilizza fork(2), questa emulazione potrebbe essere dolorosa o potrebbe essere relativamente minore.

Ecco uno good thread on GameDev.net che discute la mancanza di una funzione fork su Win32. Portano qualcosa che io non ho la pazienza o la piattaforma di accessibilità per indagare, ma suona certamente divertente, pericoloso, ed esplosivo allo stesso tempo:

Quindi, è necessario bypassare Win32 e chiamare il nativo API ({Nt | Zw} CreateProcess). Il libro "Riferimento Native Api di Windows Nt/2000" ha un esempio "Forking a Win32 Process". Questo potrebbe essere ciò di cui hai bisogno.

Sono incuriosito, ma dubito che Cygwin lo usi. Probabilmente è lì, per ribadire la mia risposta alla tua domanda: molte app Unix si basano su fork e Cygwin probabilmente lo rende disponibile. Semplicemente non aspettarti miracoli, e dovrai rendere Ruby consapevole di Cygwin ricompilandolo per includere il suo livello di emulazione.

+0

Ottima risposta! Cercherò di ricompilare Ruby con lo strato di emulazione Cygwin domani. Se funziona, sarebbe fantastico; qualche colpo di performance sarebbe ok. L'altro percorso sembra rischioso e richiederebbe molto hacking ... ma è bello sapere cosa è possibile. Grazie molto! – picardo