Sözdizimi:
fork() fonksiyonunun sözdizimi aşağıda verilmiştir. Sayısal bir değer veya 'tanımsız' döndürür. fork() işlevi başarıyla çalışıyorsa, belirli bir işlem kimliği döndürülür veya alt süreç için 0 döndürülür. fork() fonksiyonu başarısız olursa “undef” değerini döndürür.
İD veya tanımsız çatal ( ) ;
Örnek 1: Fork() Fonksiyonunun Basit Kullanımı
Fork() işlevini kullanarak geçerli süreçten bir alt süreç oluşturan aşağıdaki komut dosyasıyla bir Perl dosyası oluşturun. Fork() işlevi yürütüldükten sonra işlem kimliği yazdırılır. Ebeveyn ve çocuk süreçlerin değişkenleri farklı bellek konumlarında saklanır. Yani, eğer değişkenin değeri ana süreçte değiştirilirse, alt süreçteki aynı değişken için herhangi bir değişiklik yapılmayacaktır veya bunun tersi de geçerlidir. Bu komut dosyasında ana sürecin değişkeni değiştirilir. Daha sonra hem ebeveyn hem de çocuk süreçlerin değişkenleri yazdırılır.
#!/usr/bin/perl
katı kullan ;
kullanmak uyarılar ;
5.34.0'ı kullan ;
#Bir değişken bildir
benim $var = 'Test Çatalı' ;
#Mevcut süreci çatallayın
benim $process_id = çatal ( ) ;
#İşlem kimliğini kontrol edin
eğer ( $process_id < 0 )
{
söylemek 'Süreç çatallanamıyor.' ;
}
Elsif ( $process_id == 0 )
{
söylemek 'Alt Süreç:' ;
#Çocuk sürecin değişkeninin değerini yazdır
söylemek 'Değişkenin değeri: $var' ;
}
başka
{
söylemek 'Ana Süreç: $process_id' ;
#Değişkenin değerini güncelle
$var = 'Test Çatalı 2' ;
#Ana sürecin değişkeninin değerini yazdır
söylemek 'Değişkenin değeri: $var' ;
}
Çıktı:
Betiği çalıştırdıktan sonra aşağıdaki çıktı görünür. Ana sürecin değişkeni “Test Çatalı 2” değeriyle değiştirilir ancak alt sürecin değişkeni değişmeden kalır. Yani alt sürecin değişkeninin değeri “Test Çatalı”dır. Çataldan sonraki değer buydu:
Örnek 2: Fork() ve Wait() İşlevlerini Kullanma
fork() işlevinin wait() işleviyle kullanımını gösteren aşağıdaki komut dosyasıyla bir Perl dosyası oluşturun. Komut dosyasının başında üç değişken bildirildi. Sleep() işlevi, ana sürecin bloğunun içinde 1 saniye, alt sürecin içinde ise 2 saniye boyunca kullanılır. İki değişkenin toplamı hesaplanır ve ana sürecin bloğu içindeki başka bir değişkende saklanır. İki değişkenin değerleri çarpılır ve alt süreç içindeki başka bir değişkende saklanır. Wait() işlevi, başka bir işlemin görevine başlamadan önce bir işlemin görevinin tamamlanmasını beklemek için betiğin sonunda kullanılır. Betikte fork() fonksiyonu birden çok kez kullanılıyorsa ve birçok işlem aynı anda çalışıyorsa, kilitlenme durumu ortaya çıkabilir. Sorun wait() fonksiyonu kullanılarak çözülebilir.
#!/usr/bin/Perl
katı kullan ;
kullanmak uyarılar ;
5.34.0'ı kullan ;
#Değişkenleri başlat
benim n1 dolarım = 10 ;
benim n2 dolarım = 25 ;
$sonucum = 0 ;
#Mevcut süreci çatallayın
benim $process_id = çatal ( ) ;
#İşlem kimliğini kontrol edin
eğer ( $process_id == 0 )
{
#Sayıların çarpımını hesapla
söylemek 'Alt Süreç: $$' ;
$sonuç = $n1 * $n2 ;
söylemek '2 saniye bekle... \N ' ;
uyumak 2 ;
söylemek '$n1 ile $n2'nin çarpımı $sonuçtur.' ;
}
Elsif ( $process_id > 0 )
{
#Sayıların toplamını hesapla
söylemek 'Ana Süreç: $$' ;
$sonuç = $n1 + $n2 ;
söylemek '1 saniye bekle... \N ' ;
uyumak 1 ;
söylemek '$n1 ile $n2'nin toplamı $sonuçtur.' ;
}
başka
{
söylemek 'Süreç çatallanamıyor.' ;
}
#Süreç görevinin tamamlanmasını bekleyin
Beklemek ( ) ;
Çıktı:
Betiği çalıştırdıktan sonra aşağıdaki çıktı görünür. Çıktıya göre alt süreç başarıyla oluşturulur, üst sürecin süreç kimliği yazdırılır ve görevi tamamlamak için komut dosyası 1 saniye süreyle duraklatılır. Daha sonra, alt işlemin işlem kimliği yazdırılır ve komut dosyası, görevi tamamlamak için 2 saniye süreyle duraklatılır. Hem ana hem de alt süreçlerin çıktısı daha sonra yazdırılır:
Çözüm
Perl fork() işlevini kullanmanın amacı, bu eğitimde bir alt süreç oluşturularak ve ana ve alt süreçler bloğu içinde farklı türde görevler gerçekleştirilerek gösterilmektedir.