2009-11-29 15 views

Respuesta

7

fork(2) es kludgey bajo Cygwin, ya que el modelo de proceso de Windows no permite que esto ocurra fácilmente. Cygwin puede permitir que su engendro usarlo, pero vas a sufrir una actuación seria éxito como Cygwin tiene que emular todo a mano - incluyendo la copia de los datos ejecutables, copiando los identificadores abiertos, etc.

Dependiendo de cómo mucha escopeta usa fork(2), esta emulación podría ser dolorosa o podría ser relativamente menor.

Aquí hay una good thread on GameDev.net discutir la falta de un centro de fork en Win32. Que aparezca algo que yo no tengo la paciencia o la plataforma de acceso a investigar, pero ciertamente suena divertido, peligroso y explosivo, todo al mismo tiempo:

Por lo tanto, es necesario pasar por alto Win32 y llamar a la nativa API ({Nt | Zw} CreateProcess). El libro "Windows Nt/2000 Native Api Reference" tiene un ejemplo "Forking a Win32 Process". Esto puede ser lo que necesitas.

Estoy intrigado, pero dudo que Cygwin lo use. Probablemente esté allí, para reiterar mi respuesta a su pregunta: muchas aplicaciones de Unix se basan en fork, y es probable que Cygwin las ponga a disposición. Simplemente no esperes milagros, y tendrás que hacer que Ruby sepa de Cygwin recompilando para incluir su capa de emulación.

+0

¡Gran respuesta! Intentaré recompilar a Ruby con la capa de emulación Cygwin mañana. Si funciona, eso sería increíble; algún golpe de rendimiento estaría bien. El otro camino suena arriesgado, y requeriría muchas operaciones de piratería ... pero es bueno saber qué es posible. ¡Muchas gracias! – picardo