Sürecin Sinyal Maskesi
Önceki Sinyallerin Engellenmesi Sonraki
Sürecin Sinyal Maskesi
Engellenen sinyallerden oluşan küme sinyal maskesi olarak da adlandırılır. Her sürecin kendine özgü bir sinyal maskesi vardır. Yeni bir süreç oluşturduğunuzda, süreç sinyal maskesini onu çalıştıran süreçten miras alır. Bu sinyal maskesini değiştirerek istediğiniz sinyalleri engelleyebilir ya da da engellemeyebilirsiniz.
sigprocmask işlevinin prototipi signal.h dosyasındadır.
Her evre kendi sinyal maskesine sahip olduğundan ve dolayısıyla tek bir sinyal maskesi olmadığından çok evreli süreçlerde sigprocmask işlevini kullanmamalısınız. POSIX'e göre, çok evreli bir süreçte sigprocmask davranışı "belirsizdir". Yerine pthread_sigmask kullanılmalıdır.
int sigprocmask
(int                      nasıl,
 const sigset_t *restrict küme,
 sigset_t *restrict       eski_küme)
işlev
sigprocmask işlevi çağrıldığı sürecin sinyal maskesini değiştirmek ya da okumak için kullanılır. nasıl argümanı ile sinyal maskesinin nasıl değiştirileceği aşağıdaki değerlerden biri ile belirtilmelidir:
SIG_BLOCK
küme içindeki sinyaller engellensin--mevcut maskeye eklensin. Başka bir deyişle, yeni maske, mevcut maske ile küme'nin birleşimi olur.
SIG_UNBLOCK
küme içindeki sinyaller engellenmesin--mevcut maskeden kaldırılsın.
SIG_SETMASK
Sinyal maskesi için küme kullanılsın; önceki maske yoksayılsın.
Son argüman olan eski_küme sürecin eski maskesi hakkında bilgi döndürmek için kullanılır. Eski maskeye bakmaksızın maskeyi değiştirmek isterseniz eski_küme argümanı ile boş gösterici aktarmalısınız. Benzer şekilde, makeyi değiştirmeksizin mevcut maske hakkında bilgi almak için küme argümanı ile boş gösterici aktarmalısınız (bu durumda nasıl argümanının önemi yoktur). eski_küme argümanı çoğunlukla, sinyal maskesini daha sonra eski durumuna getirmek için mevcut durum bilgisini almak gerektiğinde kullanılır. (Sinyal maskesi fork ve exec çağrıları üzerinden miras alındığından, yazılımınız çalışmaya başlamadan içeriği hakkında bilgi edinmeniz mümkün değildir.)
sigprocmask çağrısı bekleyen sinyallerin alınmasına sebep olacağından sigprocmask dönmeden önce bu sinyallerden en az biri alınmış olacaktır. Bekleyen sinyallerin hangisinin önce alınacağı belli olmaz, ancak her sinyal için ayrı ayrı sigprocmask çağrısı yaparak hangi sinyalin önce alınacağını kendiniz belirleyebilirsiniz.
sigprocmask işlevi başarılı olduğunda 0 ile döner. -1 ile dönmüşse bir hata var demektir. Aşağıdaki errno değeri bu işlev için tanımlanmıştır:
EINVAL
nasıl argümanı geçersiz.
SIGKILL ve SIGSTOP sinyallerini engelleyemezsiniz, ama bir sinyal kümesi bunları içerebilir. Bu durumda sigprocmask hata döndürmez basitçe onları yoksayar.
Bir yazılım hatası (raise veya kill ile gönderilen sinyallerin aksine) sonucu olarak üretilen SIGFPE gibi yazılım hata sinyallerinin engellenmesinin tahmin edilmesi mümkün olmayan sonuçlara yol açacağı unutulmamalıdır. Böyle bir durumda yazılım bozulmuş olacağından sinyallerin engellenmesi kaldırıldığında yazılım isteneni yapmayabilecektir. Bkz. Yazılım Hatalarının Sinyalleri.
Önceki Üst Ana Başlık Sonraki
Sinyal Kümeleri Başlangıç Sinyal Alımının Sınanması
Bir Linux Kitaplığı Sayfası