Sinyal - Linux / Unix Komutu

Linux, POSIX güvenilir sinyallerini (bundan böyle "standart sinyaller") ve POSIX gerçek zamanlı sinyallerini destekler.

Standart sinyaller

Linux aşağıda listelenen standart sinyalleri destekler. Birkaç değer, "Değer" sütununda belirtildiği gibi mimariye bağımlıdır. (Üç değer verildiğinde, ilki genellikle alfa ve sparc için, i386 için orta olan, ppc ve sh ve sonuncusu için geçerlidir).

A - ilgili mimaride bir sinyalin bulunmadığını gösterir.

Tablonun "Eylem" sütunundaki girişler, aşağıdaki gibi sinyal için varsayılan eylemi belirtir:

terim

Varsayılan eylem işlemi sonlandırmaktır.

Kontak

Varsayılan eylem sinyali yok saymaktır.

çekirdek

Varsayılan eylem, işlemi ve döküm çekirdeğini sonlandırmaktır.

durdurmak

Varsayılan eylem işlemi durdurmaktır.

İlk önce orijinal POSIX.1 standardında açıklanan sinyaller.

işaret değer Aksiyon Yorum Yap
veya kontrol sürecinin ölümü
SIGINT 2 terim Klavyeden kesme
SIGOUT 3 çekirdek Klavyeden çık
SIGILL 4 çekirdek Yasa Dışı Talimat
SIGABRT 6 çekirdek Durdurma bildirimi iptal edildi (3)
SIGFPE 8 çekirdek Kayan nokta istisnası
sigkill 9 terim Sinyali öldür
SIGSEGV 11 çekirdek Geçersiz hafıza referansı
SIGPIPE 13 terim Kırık boru: hiçbir okuyucu ile boruya yazmak
SIGALRM 14 terim Alarmdan zamanlayıcı sinyali (2)
SIGTERM 15 terim Sonlandırma sinyali
SIGUSR1 30,10,16 terim Kullanıcı tanımlı sinyal 1
SIGUSR2 31,12,17 terim Kullanıcı tanımlı sinyal 2
SIGCHLD 20,17,18 Kontak Çocuk durdu veya sonlandırıldı
SIGCONT 19,18,25 Durdurulmuşsa devam et
SIGSTOP 17,19,23 durdurmak Işlemi durdur
SIGTSTP 18,20,24 durdurmak Tty'de yazmayı bırakın
SIGTTIN 21,21,26 durdurmak arka plan işlemi için tty girişi
SIGTTOU 22,22,27 durdurmak arka plan işlemi için tty çıkışı

SIGKILL ve SIGSTOP sinyalleri yakalanamaz, engellenemez veya göz ardı edilemez.

Daha sonra POSIX.1 standardında olmayan ancak SUSv2 ve SUSv3 / POSIX 1003.1-2001'de açıklanan sinyaller.

işaret değer Aksiyon Yorum Yap
SIGPOLL terim Pollable olayı (Sys V). SIGIO'un eşanlamlısı
SIGPROF 27,27,29 terim Profil zamanlayıcısının süresi doldu
SIGSYS 12, - 12 çekirdek Rutin için yanlış argüman (SVID)
SIGTRAP 5 çekirdek İz / kesme noktası kapanı
SIGURG 16,23,21 Kontak Soket üzerinde acil durum (4.2 BSD)
SIGVTALRM 26,26,28 terim Sanal alarm saati (4.2 BSD)
SIGXCPU 24,24,30 çekirdek CPU zaman sınırı aşıldı (4.2 BSD)
SIGXFSZ 25,25,31 çekirdek Dosya boyutu sınırı aşıldı (4.2 BSD)

Linux 2.2'ye kadar ve dahil olmak üzere SIGSYS , SIGXCPU , SIGXFSZ ve (SPARC ve MIPS dışındaki mimarilerde) varsayılan davranışı SIGBUS , işlemi (çekirdek dökümü olmayan) sonlandırmaktı. (Diğer bazı Uniselerde SIGXCPU ve SIGXFSZ için varsayılan eylem çekirdek bir dökümü olmadan işlemi sonlandırmaktır.) Linux 2.4, bu sinyaller için POSIX 1003.1-2001 gerekliliklerine uymakta, işlemi çekirdek dökümüyle sonlandırmaktadır.

Diğer çeşitli sinyaller.

işaret değer Aksiyon Yorum Yap
SIGEMT 7, -, 7 terim
SIGSTKFLT -, 16, - terim Eş işlemcideki yığın hatası (kullanılmamış)
SIGIO 23,29,22 terim I / O şimdi mümkün (4.2 BSD)
SIGCLD -, -, 18 Kontak SIGCHLD için bir eşanlamlı
SIGPWR 29,30,19 terim Elektrik kesintisi (Sistem V)
SIGINFO 29 -, - SIGPWR için bir eşanlamlı
SIGLOST -, -, - terim Dosya kilidi kayboldu
SIGWINCH 28,28,20 Kontak Pencere yeniden boyutlandırma sinyali (4.3 BSD, Sun)
SIGUNUSED - 31 - terim Kullanılmayan sinyal (SIGSYS olacaktır)

(Sinyal 29, bir alfa üzerinde SIGINFO / SIGPWR ve bir sparc üzerinde SIGLOST'tur .)

SIGEMT , POSIX 1003.1-2001'de belirtilmemiştir, ancak yine de, diğer eylemlerin çoğunda, varsayılan eyleminin genellikle bir çekirdek dökümü ile işlemi sonlandırmak olduğu durumlarda görünür.

SIGPWR (POSIX 1003.1-2001'de belirtilmemiş), varsayılan olarak, göründüğü diğer birimlerde varsayılan olarak yok sayılır.

SIGIO (POSIX 1003.1-2001'de belirtilmemiş), diğer bazı Uniselerde varsayılan olarak yok sayılır.

Gerçek Zamanlı Sinyaller

Linux , orijinal olarak POSIX.4 gerçek zamanlı uzantılarında tanımlanan gerçek zamanlı sinyalleri destekler (ve şimdi POSIX 1003.1-2001'e dahil edilmiştir). Linux 32 ( SIGRTMIN ) ila 63 ( SIGRTMAX ) arasında numaralandırılmış 32 gerçek zamanlı sinyali desteklemektedir. (Programlar, gerçek zamanlı sinyal numaralarının aralığı Unica'lara göre değiştiği için , SIGRTMIN + n notasyonu kullanarak her zaman gerçek zamanlı sinyallere başvurmalıdır.)

Standart sinyallerden farklı olarak, gerçek zamanlı sinyallerin önceden tanımlanmış anlamları yoktur: tüm gerçek zamanlı sinyaller seti uygulama tanımlı amaçlar için kullanılabilir. (Ancak, LinuxThreads uygulamasının ilk üç gerçek zamanlı sinyali kullandığını unutmayın.)

İşlenmemiş bir gerçek zamanlı sinyal için varsayılan eylem, alma işlemini sonlandırmaktır.

Gerçek zamanlı sinyaller aşağıdaki gibi ayırt edilir:

  1. Birden çok gerçek zamanlı sinyal örneği sıraya alınabilir. Tersine, bu sinyal şu ​​anda engellenirse standart bir sinyalin birden fazla örneği teslim edilirse, o zaman sadece bir örnek sıraya konur.
  2. Sinyal sigqueue (2) kullanılarak gönderilirse, eşlik eden bir değer (bir tamsayı veya işaretçi) sinyal ile gönderilebilir. Eğer alma işlemi, SA_SIGACTION işaretini sigaction (2) ile kullanarak bu sinyal için bir işleyici kurarsa , bu verileri işleyiciye ikinci argüman olarak iletilen siginfo_t yapısının si_value alanı üzerinden elde edebilir. Ayrıca, bu yapının si_pid ve si_uid alanları, sinyali gönderen işlemin PID ve gerçek kullanıcı ID'sini elde etmek için kullanılabilir.
  3. Gerçek zamanlı sinyaller garantili bir sırada teslim edilir. Aynı türden çoklu gerçek zamanlı sinyaller gönderildikleri sırada teslim edilir. Bir işleme farklı gerçek zamanlı sinyaller gönderilirse, en düşük numaralı sinyalden başlayarak iletilirler. (Yani, düşük numaralı sinyaller en yüksek önceliğe sahiptir.)

Bir işlem için hem standart hem de gerçek zamanlı sinyaller beklemede ise, POSIX, önce teslim edilmeyen belirtilmemiş bırakır. Linux, diğer birçok uygulama gibi, bu durumda standart sinyallere öncelik verir.

POSIX'e göre, bir uygulama en azından _POSIX_SIGQUEUE_MAX (32) gerçek zamanlı sinyallerin bir işleme sıraya alınmasına izin vermelidir. Bununla birlikte, işlem başına bir limit koymak yerine, Linux tüm süreçler için sıraya alınmış gerçek zamanlı sinyallerin sayısına sistem çapında bir sınır uygular.

Bu sınır, / proc / sys / kernel / rtsig-max dosyası ile değiştirilmiş (ve ayrıcalıklı olarak) görüntülenebilir. İlgili bir dosya / proc / sys / kernel / rtsig-max , kaç tane gerçek zamanlı sinyalin şu anda sıraya konulduğunu bulmak için kullanılabilir.

YAPILMASI

POSIX.1

Önemli: Komutunuzun belirli bir bilgisayarda nasıl kullanıldığını görmek için man komutunu ( % adam ) kullanın.