Melhor resposta
Desova é iniciar outro processo e então continuar com o processo que gerou a desova.
Bifurcação é um mecanismo Unix / Posix específico que pode ser usado para gerar. Forking produz duas versões quase idênticas do mesmo processo. “Quase” porque os processos podem dizer se eles são a versão original ou a versão bifurcada. Eles poderiam então simplesmente continuar, fazendo coisas diferentes de acordo com o conhecimento de qual instância eles são, mas a coisa mais comum a fazer é obter imediatamente um dos instâncias para se substituir por um processo diferente, produzindo o mesmo efeito da desova. Mas você não precisa fazer isso – a lógica de ambas as tarefas poderia ser contida em um processo.
Resposta
Process.fork permite que você execute código ruby em outro processo. Process.spawn permite que você execute outro programa em outro processo. Basicamente, Process.spawn é como usar Process.fork e então chamar exec no processo bifurcado, exceto que oferece mais opções.
e qual é o melhor para executar outro programa em um subprocesso?
Se você precisa de compatibilidade com versões anteriores, use fork + exec já que o spawn não está disponível no 1.8. Caso contrário, use o spawn, pois executar outro programa em um subprocesso é exatamente para o que o spawn foi feito.
Tanto quanto eu entendo, Process.fork aceita bloco de código e Process.spawn leva um comando do sistema mais alguns outros parâmetros.
Exatamente.
Quando devo usar um em vez do outro?
Use fork se você precisar executar código ruby arbitrário em um processo separado (você não pode fazer isso com spawn). Use spawn se precisar invocar um aplicativo em um subprocesso.