Bu nedenle, bir komut bir kabuktan tetiklendiğinde fork (), alt işlemini devralır ve exec (), alt işlemi belleğe yükler ve yürütür.
Pek değil. fork()
özdeş bir alt öğe oluşturarak geçerli işlemi klonlar. mevcut sürece exec()
yeni bir program yükler .
Benim qs:
Alt işlem, üst işlemin (özgün işlem olan) tüm niteliklerini içeriyorsa, bu alt işlemin ihtiyacı nedir? Orijinal işlem de belleğe yüklenmiş olabilir.
Bunun nedeni, üst sürecin henüz sona erdirmek istememesi; yeni bir sürecin devam etmesini ve aynı zamanda bir şeyler yapmaya devam etmesini istiyor.
Bu çatal ve exec kavramı UNIX'teki tüm yürütülebilir program için mi geçerli? Kabuk yerleşik komutları için de geçerli mi?
Harici komutlar için kabuk fork()
, komutun yeni bir işlemde çalışmasını sağlayacak şekilde yapar . Builtins sadece kabuk tarafından doğrudan yönetilir. Bir diğer kayda değer komut, exec
kabuğuna exec()
ilk önce harici programa söyleyen komuttur fork()
. Bu, kabuğun kendisinin yeni programla değiştirildiği anlamına gelir ve bu program çıkınca geri dönmesi için artık orada değildir. Dersen exec true
, o zaman /bin/true
o kapanacak yüzden artık senin terminali çalışan hiçbir şey bırakarak, kabuğun altında ve hemen çıkış yerini alacak.
bir komut / komut dosyası yürütürsem yazma kavramında kopya ne zaman kullanılır?
Taş çağında, fork()
aslında çağrı sürecindeki tüm hafızayı yeni sürece kopyalamak zorunda kaldı. Yazarken Kopyala, iki işlemin aynı hafızanın tümünü paylaşmaya başlaması için sayfa tablolarının ayarlandığı bir optimizasyondur ve yalnızca her iki işlem tarafından yazılan sayfalar gerektiğinde kopyalanır.