AÇIKLAMA
Linux hem POSIX güvenilir sinyallerini (bundan sonra "standart sinyaller" denecektir) hem de POSIX gerçek zamanlı sinyallerini destekler.
Standart Sinyaller
Linux aşağıda listelenen standart sinyalleri desteklemektedir. Sinyal numaralarının bazıları "Değer" sütununda görüldüğü gibi mimariye bağımlıdır. (Üç değer verilen yerlerde ilk değer genelde alpha ve sparc içindir, ortadaki değer i386, ppc ve sh için, sonuncusu ise mips içindir. - işareti sinyalin o mimaride bulunmadığını gösterir.)Tablonun "Eylem" sütunundaki girdiler sinyallerin öntanımlı eylemlerini gösterir:
- Son
-
Öntanımlı eylem sürecin sonlandırılmasıdır.
- Yok
-
Öntanımlı eylem sinyalin yoksayılmasıdır.
- Core
-
Öntanımlı eylem sürecin sonlandırılması ve core dosyası çıktılanmasıdır.
- Dur
-
Öntanımlı eylem sürecin durdurulmasıdır.
Sinyaller ilk defa orginal POSIX.1 standardında açıklanmıştır.
Sinyal Değer Eylem Açıklama ------------------------------------------------------------------------- SIGHUP 1 Son Denetleyen uçbirimde hangup saptandı veya denetleyen sürecin ölümü SIGINT 2 Son Klavyeden sistem kesmesi SIGQUIT 3 Core Klavyeden çıkış SIGILL 4 Core Kuraldışı komut SIGABRT 6 Core abort(3)'den çık sinyali SIGFPE 8 Core Kayan nokta hatası SIGKILL 9 Son Öldür sinyali SIGSEGV 11 Core Bellek başvurusu geçersiz SIGPIPE 13 Son Kırık boruhattı: okuyucusu olmayan boruya yazma SIGALRM 14 Son alarm(2)'den zamanlayıcı sinyali SIGTERM 15 Son Sonlandırma sinyali SIGUSR1 30,10,16 Son Kullanıcı tanımlı sinyal 1 SIGUSR2 31,12,17 Son Kullanıcı tanımlı sinyal 2 SIGCHLD 20,17,18 Yok Alt süreç durdu ya da sonlandırıldı SIGCONT 19,18,25 Durmuşsa devam etsin SIGSTOP 17,19,23 Dur Süreci durdur SIGTSTP 18,20,24 Dur tty'de yazmayı durdur SIGTTIN 21,21,26 Dur artalan süreci için tty girdisi SIGTTOU 22,22,27 Dur artalan süreci için tty çıktısı
SIGKILL ve SIGSTOP sinyalleri yakalanamaz, engellenemez ve yoksayılamaz.
Aşağıdaki sinyaller POSIX.1 standardında yoktur, SUSv2 ve SUSv3 / POSIX 1003.1-2001 standartlarında açıklanmıştır.
Sinyal Değer Eylem Açıklama ------------------------------------------------------------------------- SIGBUS 10,7,10 Core Taşıt hatası (hatalı bellek erişimi) SIGPOLL Son Kutuplanabilir olay (Sys V). SIGIO ile aynı. SIGPROF 27,27,29 Son Profilleme zamanlayıcısında zamanaşımı SIGSYS 12,-,12 Core İşlev argümanı hatalı (SVID) SIGTRAP 5 Core İz sürme/noktasal durdurma kapanı SIGURG 16,23,21 Yok Soket üzerinde acil durum (4.2 BSD) SIGVTALRM 26,26,28 Son Sanal uyarı saati (4.2 BSD) SIGXCPU 24,24,30 Core İşlemci zaman sınırı aşıldı (4.2 BSD) SIGXFSZ 25,25,31 Core Dosya boyut sınırı aşıldı (4.2 BSD)
Linux 2.2 dahil ve daha öncesinde SIGSYS, SIGXCPU, SIGXFSZ ve (SPARC ve MIPS dışındaki mimarilerde) SIGBUS sinyali için öntanımlı davranış (core çıktılanmaksızın) süreci sonlandırmaktı. (SIGXCPU ve SIGXFSZ sinyali için bazı Unix'lerde öntanımlı davranış bir core çıktılamaksızın süreci sonlandırmak şeklindedir.) Linux 2.4 bu sinyaller için POSIX 1003.1-2001 gereksinimlerine uygun olarak süreci sonlandırırken bir core çıktılamaktadır.
Diğer sinyaller aşağıdadır:
Sinyal Değer Eylem Açıklama ------------------------------------------------------------------------- SIGIOT 6 Core IOT kapanı. SIGABRT ile eşanlamlı SIGEMT 7,-,7 Son SIGSTKFLT -,16,- Son ek işlemcide yığıt hatası (kullanılmadı) SIGIO 23,29,22 Son G/Ç şimdi nümkün (4.2 BSD) SIGCLD -,-,18 Yok SIGCHLD ile eşanlamlı SIGPWR 29,30,19 Son Güç kaybı (System V) SIGINFO 29,-,- SIGPWR ile eşanlamlı SIGLOST -,-,- Son Dosya kilidi kaybı SIGWINCH 28,28,20 Yok Pencere boyutlandırma sinyali (4.3 BSD, Sun) SIGUNUSED -,31,- Son Kullanılmamış sinyal (SIGSYS olacak)
29 numaralı sinyal bir alpha için SIGINFO / SIGPWR iken sparc için SIGLOST'dur.
SIGEMT sinyali POSIX 1003.1-2001 standardında belirtilmemesine rağmen çoğu Unix'de rastlandığı yerde öntanımlı eylem olarak genellikle süreci sonlandırır ve bir core çıktılar.
SIGPWR (POSIX 1003.1-2001 standardında belirtilmemiştir) sinyali de bu Unix'lerde rastlandığı yerde öntanımlı eylem olarak genellikle yoksayılır.
SIGIO (POSIX 1003.1-2001 standardında belirtilmemiştir) sinyali de başka birçok Unix'de öntanımlı olarak yoksayılır.
Gerçek Zamanlı Sinyaller
Linux, POSIX.4'de tanımlı (ve şimdi POSIX 1003.1-2001'de de bulunan) gerçek zamanlı oluşumlar olarak gerçek zamanlı sinyalleri destekler. Linux, 32'den (SIGRTMIN) 63'e (SIGRTMAX) kadar numaralı 32 tane gerçek zamanlı sinyal destekler. (Gerçek zamanlı sinyallerin aralıkları Unix'ler arasında değişiklik gösterdiğinden, uygulamalar gerçek zamanlı sinyalleri daima SIGRTMIN+n sözdizimi ile kullanmalıdır.)Standart sinyallerin tersine gerçek zamanlı sinyallerin önceden tanımlı anlamları yoktur: gerçek zamanlı sinyallerin tümü uygulama tanımlı amaçlar için kullanılır. (Yine de gerçek zamanlı sinyallerin ilk üçünü LinuxThreads oluşumları kullanır.)
Gerçek zamanlı sinyaller aşağıdaki özelliklere sahiptir:
- 1.
-
Gerçek zamanlı sinyallerin çoklu gerçeklemeleri kuyruklanabilir. Tersine olarak, bir standart sinyal bloklanmış olduğu halde çoklu gerçeklemeleri kulanılmışsa sadece bir gerçeklemesi kuyruklanabilir.
- 2.
-
Bir sinyal sigqueue(2) kullanılarak gönderilmişse, sinyalle birlikte bir değer (bir tamsayı ya da gösterici) gönderilebilir. Sinyali alan süreç sigaction(2)'la SA_SIGACTION bayrağını kullanarak bu sinyal için bir tutucu oluşturursa, bu süreç veriyi, tutucuya ikinci argüman olarak aktarılan siginfo_t yapısının si_value alanı üzerinden sağlayabilir. Diğer taraftan, bu yapının si_pid ve si_uid alanları sinyali gönderen sürecin gerçek kullanıcı kimliği ile süreç kimliğini (PID) elde etmekte kullanılabilir.
- 3.
-
Gerçek zamanlı sinyaller garanti edilmiş bir sırada teslim edilir. Aynı türdeki çoklu gerçek zamanlı sinyaller gönderildikleri sırayla teslim edilir. Bir sürece farklı gerçek zamanlı sinyaller gönderilmişse, en düşük numaralı sinyalden başlayarak teslim edilirler (yani düşük numaralı sinyallerin önceliği daha yüksektir.).
Eğer bir süreç için hem standart hem de gerçek zamanlı sinyaller askıdaysa, POSIX hangisinin önce teslim edileceğini belirlememiştir. Linux, benzer bir çok gerçeklemede olduğu gibi böyle bir durumda standart sinyallere öncelik verir.
POSIX'e uygun olarak, bir oluşum, bir sürece kuyruklanacak gerçek zamanlı sinyallerin sayısının en azından _POSIX_SIGQUEUE_MAX (32) olmasına izin vermelidir. Bunula birlikte, süreç başına bir sınır koymaktansa, Linux tüm süreçler için kuyruklanacak gerçek zamanlı sinyallerin sayısı için sistem çapında bir sınır koyar. Bu sınır /proc/sys/kernel/rtsig-max dosyasında görülebilir ve izinlere bağlı olarak değiştirilebilir. /proc/sys/kernel/rtsig-max ile ilgili bir dosya ile de kaç tane gerçek zamanlı sinyalin kuyruklanmış olduğu görülebilir.
UYUMLULUK
POSIX.1
YAZILIM HATALARI
SIGIO ve SIGLOST aynı değere sahiptir. Sonuncusu çekirdek kaynak kodunda iptal edilmiştir, ancak hala bazı yazılımların derleme süreçleri 29 numaralı sinyalin SIGLOST olduğunu düşünüyor.
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Kasım 2003