SORU
31 EKİM 2009, CUMARTESİ


Exec ve çatal arasındaki farklar

Ne fork exec arasındaki farklar?

CEVAP
31 EKİM 2009, CUMARTESİ


fork exec kullanımı çok basit yeni bir işlem başlatmak için bir yol sağlar UNIX ruhu örneğidir.

fork çağrı temelde geçerli yinelenen bir süreç, aynı yaparneredeyseher yol (her şey, örneğin, bazı uygulamalarda kaynak sınırları içinde kopyalanır ama fikir mümkün olduğunca yakın bir kopyasını oluşturmak için).

Yeni süreci (çocuk) farklı bir süreç NUMARASI (PID) alır ve üst PID gibi eski işlem (üst) PID (PPID) vardır. Çünkü bu iki işlem yapıyorum hemen aynı kod, belli ki, bu dönüş kodu fork - çocuk alır 0, üst alır, PID, çocuk. Bu, tabii ki, fork çağrı varsayarak çalışır - değilse, hiçbir çocuk oluşturulur ve üst bir hata kodu alır.

exec çağrı temelde yeni bir program ile tüm mevcut süreci değiştirmek için bir yoldur. Geçerli işlem alanına programı yükler ve giriş noktasından çalışır.

, fork exec sık sık dizi içinde yeni bir program, geçerli bir süreç bir çocuk olarak çalıştırmak için kullanılır. Kabukları genellikle bunu ne zaman denemek için çalışacak bir program gibi find - kabuk çatal, sonra çocuk yükler find programa bellek, kurma tüm komut satırı argümanları, standart G/Ç ve benzeri.

Ama birlikte kullanılması için zorunlu değiller. Bu kesinlikle kabul edilebilir bir program fork kendisi olmadan execıng, örneğin, program içerir hem üst hem de alt kod (ihtiyacın var olmak dikkatli ne yapacaksın, her bir uygulama olabilir kısıtlamalar). Bu oldukça çok kullanılan (ve hala) sadece TCP listen port üzerinde hangi araçları ve kendilerini bir kopyasını ana geri dinliyor giderken özel bir isteği işlemek için çatal.

Benzer şekilde, bitirdiler ve başka bir programı çalıştırmak istediğiniz programları çocuk için fork, exec wait gerek yok. Sadece çocuğun doğrudan sürecin uzaya yük olabilir.

Bazı UNİX uygulamaları kopya üzerinde yazma diyorlar kullanan fork optimize edilmiş. Bu program, bu alanda bir şeyler değiştirmek için girişimleri kadar fork işlem alanı kopyalama gecikme için bir hile. Tüm bu süreç bir alanı kopyalamak için yok bu program fork exec sadece kullanmak için yararlıdır.

execfork aşağıdaki (ve bu çoğunlukla böyle oluyor), bir işlem alanı için yazmak neden olur ve sonra çocuk süreç için kopyalanır.

exec aramalar(, *, execve*26 25* *ve bütün bir aile ama exec bağlamda burada onlara herhangi bir araç olduğunu unutmayın.

Aşağıdaki diyagram bash kabuk ls komutu ile bir dizin listesi için kullanıldığı fork/exec tipik çalışma gösterir:

 -------- 
| pid=7  |
| ppid=4 |
| bash   |
 -------- 
    |
    | calls fork
    V
 --------               -------- 
| pid=7  |    forks    | pid=22 |
| ppid=4 | ----------> | ppid=7 |
| bash   |             | bash   |
 --------               -------- 
    |                      |
    | waits for pid 22     | calls exec to run ls
    |                      V
    |                   -------- 
    |                  | pid=22 |
    |                  | ppid=7 |
    |                  | ls     |
    V                   -------- 
 --------                  |
| pid=7  |                 | exits
| ppid=4 | <--------------- 
| bash   |
 -------- 
    |
    | continues
    V

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • Makeup Lover

    Makeup Lover

    12 HAZİRAN 2011
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011