Arayüzü basitleştirmek için. Alternatif forkve execWindows ' CreateProcess işlevi gibi bir şey olurdu . Kaç tane parametrenin CreateProcessbulunduğuna ve birçoğunun daha da fazla parametre içeren yapılar olduğuna dikkat edin . Bunun nedeni , yeni işlem hakkında kontrol etmek isteyebileceğiniz her şeyin iletilmesi gerektiğidir CreateProcess. Aslında, CreateProcessyeterli parametreye sahip olmadığı için Microsoft, CreateProcessAsUser ve CreateProcessWithLogonW öğesini eklemek zorunda kaldı .
fork/execModel ile tüm bu parametrelere ihtiyacınız yok. Bunun yerine, sürecin belirli özellikleri arasında korunur exec. Bu, istediğiniz forkişlem niteliklerini (normalde kullandığınız fonksiyonları kullanarak) değiştirmenizi ve ardından değiştirmenizi sağlar exec . Linux'ta forkhiçbir parametresi yoktur ve execveyalnızca 3: çalıştırılacak program, onu vermek için komut satırı ve çevresi vardır. (Başka execfonksiyonlar da vardır, ancak execvegenel kullanım durumlarını basitleştirmek için C kütüphanesi tarafından sağlanan sarmalayıcılardır .)
Eğer farklı bir akım dizin olan bir süreç başlatmak istiyorsanız: fork, chdir, exec.
Stdin / stdout: komutunu yeniden yönlendirmek istiyorsanız fork, dosyaları açın / kapatın exec.
Eğer anahtar kullanıcılara isterseniz: fork, setuid, exec.
Bütün bunlar ihtiyaç duyulduğunda birleştirilebilir. Biri süreç özelliğinin yeni bir tür ile gelirse, değiştirmek gerekmez forkve exec.
Larksklerde de belirtildiği gibi, çoğu modern Unix yazma üzerine kopya kullanır, bu nedenle forkönemli bir ek yük içermez.
fork(2)Linux altında adam sayfanın mesajı:Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.Hayal (ama kesin olarak bilmiyorum) bu diğer modern UNIX'ler için durum olduğunu.