fork ve exec: Unix programları nasıl başlatır
Kısaca: Unix yeni programları iki adımda başlatır: fork çalışan süreci kopyalar, exec kopyadaki programı başka bir programla değiştirir.
Biraz daha ayrıntılı: Kabuktaki her komut da böyle başlar. Bu bölünme, iki adım arasında yönlendirmeler veya yetkiler gibi ayarların yapılmasına izin verir.
Ayrıntılı
- fork: Neredeyse özdeş durumda bir alt süreç oluşturur. Dönüş değeri ayırt eder: ebeveyn süreçte alt sürecin PID’i, alt süreçte 0. Copy-on-write sayesinde ucuzdur.
- exec: Sürece yeni bir program yükler. PID kalır, bellek ve kod değiştirilir.
- wait: Ebeveyn, alt sürecin bitmesini
wait/waitpidile bekler. Unutursa bir zombi süreç kalır. - Yönlendirme: Kabuk,
fork’tan sonra veexec’ten önce dosyaları (>) veya boruları açar ve bunları girdi ve çıktı olarak ayarlar. - Windows: fork bilmez; ikisini birleştiren
CreateProcessvardır. - Modern alternatifler:
posix_spawnvevfork, büyük süreçlerde maliyeti azaltır. - Konteynerler: Konteynerdeki ilk süreç PID 1’dir ve öksüz alt süreçleri toplamalıdır.
Ayrıca bak: Süreçler ve sinyaller