La migliore risposta
La generazione delle uova è avviare un altro processo e poi continuare con il processo che ha generato la deposizione delle uova.
Il fork è un meccanismo Unix / Posix specifico che può essere utilizzato per lo spawn. Forking produce due versioni quasi identiche dello stesso processo. “Quasi” perché i processi possono dire se si tratta della versione originale o biforcuta. potrebbero quindi continuare, facendo cose diverse in base alla conoscenza di quale istanza si trovano, ma la cosa più comune da fare è ottenere immediatamente uno dei istanze di sostituirsi con un processo diverso, producendo lo stesso effetto della deposizione delle uova. Ma non devi farlo: la logica per entrambe le attività potrebbe essere contenuta in un unico processo.
Risposta
Process.fork ti permette di eseguire codice ruby in un altro processo. Process.spawn ti consente di eseguire un altro programma in un altro processo. Fondamentalmente Process.spawn è come usare Process.fork e quindi chiamare exec nel processo biforcuto, tranne per il fatto che ti dà più opzioni.
e qual è il migliore per eseguire un altro programma in un sottoprocesso?
Se hai bisogno della retrocompatibilità, usa fork + exec poiché spawn non è disponibile nella 1.8. Altrimenti usa spawn poiché eseguire un altro programma in un sottoprocesso è esattamente ciò per cui spawn è fatto.
Per quanto ho capito Process.fork accetta blocchi di codice e Process.spawn accetta un comando di sistema più alcuni altri parametri.
Esatto.
Quando dovrei usarne uno invece dellaltro?
Usa fork se hai bisogno di eseguire codice ruby arbitrario in un processo separato (non puoi farlo con spawn). Usa spawn se devi invocare unapplicazione in un sottoprocesso.