Başka Bir Sürece Sinyal Gönderme
Önceki Sinyallerin Üretilmesi Sonraki
Başka Bir Sürece Sinyal Gönderme
kill işlevi bir sinyalin başka bir sürece gönderilmesi için kullanılır. İsmine rağmen, bir sürecin sonlandırılmasına sebep olmaktan farklı birşeyler yapmak için de kullanılabilir. Süreçler arasında sinyal gönderilmesini gerektiren durumlara ilişkin bazı örnekler:
  • Bir süreç bir işlemi yerine getirmesi için kendini bir alt süreç olarak çalıştırabilir -- bir altsüreç çalıştırılması bir kısır döngü oluşturabilir -- ve işlem yerine getirildiğinde alt sürecini sonlandırabilir.
  • Bir hata oluştuğunda ya da bir olay gerçekleştiğinde, bir süreç, bir grubun parçası olarak çalıştırılıp gruptaki başka bir süreci uyarmak ya da sonlandırmak için kullanılabilir.
  • Birlikte çalışan iki sürecin eşzamanlanması gerekir.
Bu bölümde bir sürecin nasıl çalıştığını bildiğinizi varsayacağız.
kill işlevi signal.h dosyasında bildirilmiştir.
int kill
(pid_t pid,
 int   sinyalnum)
işlev
kill işlevi pid ile belirtilen süreç ya da süreç grubuna sinyalnum sinyalini gönderir. Standart Sinyaller bölümünde listelenen sinyallere ilaveten, ayrıca pid süreç kimliğini doğrulamak için sıfır değerini de kullanabilirsiniz.
Sinyal alacak süreç veya süreç grubunu belirten pid değerleri ve anlamları:
pid > 0
Belirteci pid olan süreç.
pid == 0
Gönderen ile aynı gruptaki süreçlerin tümü.
pid < -1
Belirteci -pid olan süreç grubu.
pid == -1
Eğer süreç ayrıcalıklı ise, sinyal, bazı özel sistem süreçleri dışında kalan tüm süreçlere gönderilir. Aksi takdirde, sinyal, aynı etkin kullanıcı kimlikli tüm süreçlere gönderilir.
Bir süreç kill (getpid(), sinyal) gibi bir çağrı ile kendisine bir sinyal gönderebilir ve sinyal engellenmez, sonrasında kill dönmeden önce sürece en az bir sinyal (sinyalnum yerine beklemede olan engellenmeyen sinyaller gidebilir) gönderir.
Sinyal gönderme başarılı olduğunda kill sıfır ile döner. Aksi takdirde sinyal gönderilmemiş demektir ve -1 ile döner. Eğer pid bir sinyalin birden fazla sürece gönderilmesini belirtiyorsa, en azından bir sürece sinyal gönderilebilmişse kill sıfır ile dönecektir. Sinyali alan ve alamayan süreçlerin hangileri olduğunu saptayacak bir yöntem yoktur.
Bu işlev için tanımlanmış olan errno değerleri:
EINVAL
sinyalnum geçersiz ya da desteklenmeyen bir numara.
EPERM
pid ile belirtilen sürece ya da süreç grubundaki herhangi bir sürece bir sinyal göndermeye yetkili değilsiniz.
ESRCH
pid mevcut bir süreci veya grubu betimlemiyor.
int killpg
(int pgid,
 int sinyalnum)
işlev
sinyalnum sinyalini pgid ile belirtilen süreç grubuna göndermesi dışında kill gibidir. Bu işlev BSD uyumluluğu için vardır. Bunun yerine kill kullanmak yazılımınızı daha taşınabilir yapar.
kill kullanımına basit bir örnek olan
kill (getpid (), sinyal) çağrısı
raise (sinyal) çağrısı ile aynı etkiye sahiptir.
Önceki Üst Ana Başlık Sonraki
Kendine Sinyal Gönderme Başlangıç kill ile İlgili Sınırlamalar
Bir Linux Kitaplığı Sayfası