Temel Kavramlar

Sinyal Numaraları

Sinyaller sistemde 1'den başlamak suretiyle nümerik değerlerle gösterilirler.

Örnek olarak 1 nolu sinyal, hemen her sistemde HUP sinyali olarak değerlendirilirken 9 nolu sinyal de KILL sinyali olarak bilinir.

Bununla birlikte uygulamalarımızda sinyal kullandığımızda bu rakamların kullanılması kesinlikle önerilmez. POSIX sinyalleri için uygulama içerisinde <signal.h> dosyası include edilmeli ve SIGHUP, SIGKILL gibi ilgili numaralara ait sabit tanımları kullanılmalıdır.

Sisteminizdeki /usr/include/signal.h dosyasını inceleyecek olursanız, dosya içerisinde __USE_POSIX, __USE_XOPEN, __USE_POSIX199309 gibi değerlerin tanımlarına bakılarak yapılan ek işlemleri ve include edilen diğer dosyaları görebilirsiniz. Linux sistemlerdeki sinyal numaralarını uygulama kodunuzda doğrudan include etmeniz gerekmeyen /usr/include/asm-generic/signal.h dosyasında bulabilirsiniz.

Sinyal Üretimi ve Gönderimi

Sinyal üretimi, bir olay nedeniyle gerçekleşir. Ancak sinyalin ilgili uygulamaya gönderilmesi (deliver) işlemi, sinyalin üretimi ile aynı anda olmaz.

Sinyalin uygulamaya gönderilebilmesi için uygulamanın o an CPU kaynağına sahip ve Running durumda çalışıyor olması gereklidir. Dolayısıyla belirli bir uygulamaya gönderilmek üzere üretilen bir sinyalin gönderimi, ilgili uygulamanın context-switch sonrası tekrar çalışmaya başlamasıyla birlikte gerçekleşir.

Bekleyen (Pending) Sinyal Kavramı

Sinyalin üretim anından gönderilme işlemi gerçekleşene kadarki süre zarfında, sinyaller pending olarak işaretlenir ve beklemede tutulur.

Bir process için bekleme durumundaki sinyal sayısı ve izin verilen pending sinyal sayısına, proc dosya sisteminden ilgili process id (PID) dizini altındaki /proc/PID/status dosyasında SigQ: 2/15235 örneğindeki gibi erişilebilir.

Sinyal Maskeleri ve Bloklama

Sinyallerin asenkron doğası nedeniyle uygulama tarafından ne zaman geleceğinin öngörülemez olması, uygulamada kritik bir işlem yapılıyorken kesintiye uğrama riskini de beraberinde getirir.

Bu şekildeki istenmeyen durumların önüne geçebilmek için sinyal maskeleri kullanarak kritik bir işlem öncesi bazı sinyalleri bloklama, kritik olan kısım tamamlandıktan sonra da tanımlanmış blokları kaldırma imkanı sağlanmıştır. Bu işlem uygulama geliştiricinin sorumluluğundadır.

Uygulama tarafından bir sinyal bloklandığında, blok kaldırılana kadar üretilen aynı tipteki diğer sinyaller bekleme (pending) durumunu korur. Uygulamada blok kaldırıldığın anda bekleyen sinyallerin gönderimi de sağlanır.

Bu şekilde blok anında beklemeye geçen sinyallerden aynı tipte olanlar, normal kullanımda blok kaldırıldıktan sonra uygulamaya sadece 1 defa gönderilir. Realtime sinyallerde ise durum farklıdır.

Sinyal Türleri

Sinyal türlerine göre öntanımlı eylemler değişkenlik gösterebilmektedir. Eğer uygulama içerisinde ilgili sinyali karşılayan bir signal handler fonksiyonu tanımlanmamış ise, öntanımlı eylem gerçekleşecektir. Bu bazen uygulamanın sonlandırılması bazen de sinyalin gözardı edilmesi anlamına gelir.

Bazı sinyallerin ise uygulama katmanında yakalanması mümkün değildir, bu tarz sinyaller her zaman öntanımlı eylemi gerçekleştirirler (KILL sinyali gibi).

Uygulamanın sonlanmasına yol açan bazı eylemlerde ek olarak core dump dosyası da üretilir. Core dump dosyaları, ilgili process'in sanal bellek tablosunun diske yazılması suretiyle, sonraki aşamalarda debug araçları ile process'in sonlanmadan önceki durum bilgisinin incelenebilmesi amacıyla oluşturulur.

Sinyal No Öntanımlı Eylem Yakalanabilir mi?
SIGHUP 1 Uygulamayı sonlandır Evet
SIGINT 2 Uygulamayı sonlandır Evet
SIGQUIT 3 Uygulamayı sonlandır (core dump) Evet
SIGILL 4 Uygulamayı sonlandır (core dump) Evet
SIGTRAP 5 Uygulamayı sonlandır (core dump) Evet
SIGABRT 6 Uygulamayı sonlandır (core dump) Evet
SIGFPE 8 Uygulamayı sonlandır (core dump) Evet
SIGKILL 9 Uygulamayı sonlandır Hayır
SIGBUS 10 Uygulamayı sonlandır (core dump) Evet
SIGSEGV 11 Uygulamayı sonlandır (core dump) Evet
SIGSYS 12 Uygulamayı sonlandır (core dump) Evet
SIGPIPE 13 Uygulamayı sonlandır Evet
SIGALRM 14 Uygulamayı sonlandır Evet
SIGTERM 15 Uygulamayı sonlandır Evet
SIGUSR1 16 Uygulamayı sonlandır Evet
SIGUSR2 17 Uygulamayı sonlandır Evet
SIGCHLD 18 Yoksay Evet
SIGTSTP 20 Durdur Evet
SIGURG 21 Yoksay Evet
SIGPOLL 22 Uygulamayı sonlandır Evet
SIGSTOP 23 Durdur Hayır
SIGCONT 25 Durdurulmuşsa sürdür Evet
SIGTTIN 26 Durdur Evet
SIGTTOU 27 Durdur Evet
SIGVTALRM 28 Uygulamayı sonlandır Evet
SIGPROF 29 Uygulamayı sonlandır Evet
SIGXCPU 30 Uygulamayı sonlandır (core dump) Evet
SIGXFSZ 31 Uygulamayı sonlandır (core dump) Evet

results matching ""

    No results matching ""