Arayüzü basitleştirmek için. Alternatif fork
ve exec
Windows ' CreateProcess işlevi gibi bir şey olurdu . Kaç tane parametrenin CreateProcess
bulunduğ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, CreateProcess
yeterli parametreye sahip olmadığı için Microsoft, CreateProcessAsUser ve CreateProcessWithLogonW öğesini eklemek zorunda kaldı .
fork/exec
Model ile tüm bu parametrelere ihtiyacınız yok. Bunun yerine, sürecin belirli özellikleri arasında korunur exec
. Bu, istediğiniz fork
işlem niteliklerini (normalde kullandığınız fonksiyonları kullanarak) değiştirmenizi ve ardından değiştirmenizi sağlar exec
. Linux'ta fork
hiçbir parametresi yoktur ve execve
yalnızca 3: çalıştırılacak program, onu vermek için komut satırı ve çevresi vardır. (Başka exec
fonksiyonlar da vardır, ancak execve
genel 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 fork
ve 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.