Bedste svar
Gydning er at starte en anden proces og derefter fortsætte med den proces, der gjorde gydningen.
Forking er en specifik Unix / Posix-mekanisme, der kan bruges til gydning. Forking producerer to næsten identiske versioner af den samme proces. “Næsten”, fordi processerne kan fortælle, om de er den originale eller den forkedede version. De kunne så bare fortsætte med at gøre forskellige ting i henhold til den viden om hvilken instans de er, men den mest almindelige ting at gøre er at straks få en af de tilfælde at erstatte sig selv med en anden proces, der producerer den samme effekt som gydning. Men du behøver ikke til at gøre det – logikken for begge opgaver kunne være indeholdt i den ene proces.
Svar
Process.fork giver dig mulighed for at køre rubinkode i en anden proces. Process.spawn giver dig mulighed for at køre et andet program i en anden proces. Grundlæggende er Process.spawn som at bruge Process.fork og derefter kalde exec i forked processen, bortset fra at det giver dig flere muligheder.
og hvilken er bedre at køre et andet program i en underproces?
Hvis du har brug for bagudkompatibilitet, skal du bruge fork + exec, da spawn ikke er tilgængelig i 1.8. Ellers skal du bruge spawn, da kørsel af et andet program i en underproces er nøjagtigt hvad spawn er lavet til.
Så vidt jeg forstår, accepterer Process.fork blok af kode, og Process.spawn tager en systemkommando plus nogle andre parametre.
Præcis.
Hvornår skal jeg bruge den ene i stedet for den anden?
Brug fork, hvis du har brug for at køre vilkårlig rubinkode i en separat proces (du kan ikke gøre det med spawn). Brug spawn, hvis du har brug for at påkalde en applikation i en underproces.