La mejor respuesta
El desove es iniciar otro proceso y luego continuar con el proceso que hizo el desove.
La bifurcación es un mecanismo específico de Unix / Posix que se puede utilizar para generar. La bifurcación produce dos versiones casi idénticas del mismo proceso. «Casi» porque los procesos pueden decir si son la versión original o la bifurcada. Ellos podrían continuar, haciendo diferentes cosas de acuerdo con el conocimiento de qué instancia son, pero lo más común es obtener inmediatamente uno de los instancias para reemplazarse con un proceso diferente, produciendo el mismo efecto que el desove. Pero no tienes para hacer eso: la lógica para ambas tareas podría estar contenida en un proceso.
Respuesta
Process.fork le permite ejecutar código ruby en otro proceso. Process.spawn le permite ejecutar otro programa en otro proceso. Básicamente, Process.spawn es como usar Process.fork y luego llamar a exec en el proceso bifurcado, excepto que le brinda más opciones.
¿y cuál es mejor para ejecutar otro programa en un subproceso?
Si necesita compatibilidad con versiones anteriores, use fork + exec ya que spawn no está disponible en 1.8. De lo contrario, use spawn, ya que ejecutar otro programa en un subproceso es exactamente para lo que está hecho spawn.
Hasta donde tengo entendido, Process.fork acepta bloque de código y Process.spawn toma un comando del sistema más algunos otros parámetros.
Exactamente.
¿Cuándo debería usar uno en lugar del otro?
Use fork si necesita ejecutar código ruby arbitrario en un proceso separado (no puede hacer eso con spawn). Use spawn si necesita invocar una aplicación en un subproceso.