Bir Sürecin Oluşturulması
Önceki XXVI. Oylum - Süreçler Sonraki
Bir Sürecin Oluşturulması
fork işlevi süreç oluşturmanın temelidir ve unistd.h başlık dosyası içinde bildirilmiştir.
pid_t fork
(void)
işlev
fork işlevi yeni bir süreç oluşturur.
Süreç oluşturma başarılıysa, hem üst hem de alt süreçler çalışır ve her ikisi de fork işlevinin dönüş değerini görür, ancak bu değerler farklıdır: fork işlevi, alt süreçte 0 değerini ve üst süreçte alt sürecinin süreç kimliğini döndürür.
Süreç oluşturma başarısızsa, fork işlevi üst süreçte -1 değerini döndürür. Aşağıdaki errno hata durumları fork işlevi için tanımlanmıştır:
EAGAIN
Başka süreç oluşturmak için yeterli sistem kaynağı yok ya da kullanıcının zaten çok fazla süreci çalışmakta. Bu RLIMIT_NPROC kaynak sınırının aşılmakta olduğu anlamına gelir, bu genellikle artırılabilir; bkz. Özkaynak Kullanımın Sınırlanması.
ENOMEM
Süreç sistemin sağlayabileceğinden fazla yere ihtiyaç duymaktadır.
Alt süreci üstünden farklılaştıran özellikleri:
  • Alt sürecin kendi süreç kimliği vardır.
  • Alt sürecin üst süreç kimliği üst sürecinin süreç kimliğidir.
  • Alt süreç, üst sürecin açık dosya tanımlayıcılarının kendine ait kopyalarını alır. Böylece üst süreçteki dosya tanımlayıcısının özelliklerinin değiştirilmesi alttaki dosya tanımlayıcıları etkilemez, bu tersi için de geçerlidir. Bkz. Dosyalar Üzerindeki Denetim İşlemleri. Ancak, her tanımlayıcıyla ilişkilendirilmiş olan dosya konumu her iki süreç tarafından paylaşılır; bkz. Dosyada Konumlama.
  • Alt süreçler için biten işlemci süreleri sıfırlanır; bkz. İşlemci Süresinin Sorgulanması.
  • Alt süreç üstü tarafından kurulmuş dosya kilitlerini miras almaz.Dosyalar Üzerindeki Denetim İşlemleri.
  • Alt süreç üstü tarafından kurulmuş uyarıları miras almaz.Bir Alarmın Ayarlanması.
  • Alt süreç için bekleyen sinyal kümesi (Sinyallerin Gönderilmesi) temizlenir. (Alt süreç baskılanmış sinyallerin maskesini ve sinyal hareketlerini üst sürecinden miras alır.)
pid_t vfork
(void)
işlev
vfork işlevi fork gibidir fakat bazı sistemlerde daha verimlidir; fakat, güvenli kullanımı için bazı kısıtlar vardır.
forkçağıran sürecin adres alanının tam bir kopyasını alıp hem alt hem de üst sürecin bağımsız olarak çalışmasını sağlarken, vfork bu kopyayı yapmaz. Bunun yerine vfork ile oluşturulan alt süreç _exit veya exec işlevleri çağrılana kadar üst sürecin adres alanını paylaşır. Bu arada, üst süreç çalışmayı askıya alır.
vfork ile oluşturulan alt sürecin evrensel (global) verileri, hatta üstüyle paylaştığı yerel değişkenleri bile değiştirmesine izin vermemek konusunda dikkatli olmalısınız. Bundan başka, alt süreç vfork'u çağıran işlevden dönemez! Bu üst sürecin kontrol bilgisini karıştırabilir. Kuşkunuz varsa, fork kullanın.
Bazı işletim sistemleri gerçek anlamda vfork'u uygulamazlar. GNU C kütüphanesi vfork'u bütün sistemlerde kullanmanıza izin verir, ancak aslında vfork yoksa fork çalıştırır. Eğer vfork kullanımında önlemlerinizi alırsanız, yazılımınız, sistem onun yerine fork'u kullansa da çalışır.
Önceki Üst Ana Başlık Sonraki
Süreç Kimliği Başlangıç Bir Dosyanın Çalıştırılması
Bir Linux Kitaplığı Sayfası