Sinyal yakalama işlevi çalışırken başka bir sinyal alındığıda ne olacak?
Belli bir sinyal için eylemci işlev çağrıldığında eylemci işlemlerini bitirene kadar sinyal özdevinimli olarak engellenir. Bu, aynı iki sinyal peşpeşe alınırsa, biri için işlem tamamlanana kadar diğeri engellenecek demektir. (Bu türden birden fazla sinyal geldiğinde bunlara da izin vermek isterseniz,
sigprocmask kullanarak sinyalin engellenmemesini sağlayabilirsiniz; bkz.
Sürecin Sinyal Maskesi.)
Bununla birlikte, eylemci işleviniz başka çeşit bir sinyal ile hala durdurulabilir durumdadır. Bundan kaçınmak için,
sigaction ile kullanılan veri yapısının
sa_mask üyesinde eylemci çalışırken hangi sinyallerin engelleneğini belirtebilirsiniz. Bunlar eylemcinin çağrılmasına sebep olan sinyale ek olarak belirtilir ve diğer sinyaller normal olarak süreç tarafından engellenir. Bkz.
Eylemci Çalışırken Sinyallerin Engellenmesi.
Eylemci işini bitirdiğinde engellenen sinyaller eylemcinin çalıştırılmadan önceki durumlarına dönerler. Bu durumda, eylemci işlev içinde sigprocmask kullanılması sadece eylemcinin çalışması sırasında gelen sinyalleri etkiler, eylemci işlev döndükten sonra gelen sinyalleri etkilemez.
| Taşınabilirlik Bilgisi |
---|
Yazılımınızın System V Unix üzerinde gerektiği gibi çalışmasını istiyorsanız ve eşzamansız bir sinyal alacağınızı umuyorsanız, bu sinyalin eylemcisini oluşturmak için daima sigaction kullanın. Bu sistem üzerinde signal ile oluşturulan bir eylemci ile sinyalin yakalanması özdevinimli olarak sinyal eyleminin öntanımlı eyleme yani SIG_DFL'a ayarlanmasına sebep olur. Böyle bir eylemci her çalıştığında kendini tekrar kurmalıdır. Bu uygulama, rahatsız edici olsa da, eylemci çalışırken sinyaller işleme alınamadığında da çalışır. Şöyle ki, hemen ardından başka bir sinyal gelebilir ve eylemci kendini daha kurmadan sinyal alınabilir. Bu durumda ikinci sinyal öntanımlı eylem ile karşılanacak ve süreç sonlanabilecektir. |