Önce ikinci sorunuzu cevaplamak için: SIGSTOP
ve SIGKILL
uygulama tarafından yakalanamazsınız, ancak diğer tüm sinyaller bile olabilir SIGSEGV
. Bu özellik hata ayıklama için kullanışlıdır - örneğin, doğru kütüphane desteğiyle, SIGSEGV
yalnızca bu segfault'un nerede olduğunu göstermek için bir yığın geriye izleme dinleyebilir ve oluşturabilirsiniz.
Her man 7 signal
komutun ne yaptığı hakkındaki resmi bir kelime (Linux için zaten) bir Linux komut satırından yazarak kullanılabilir . http://linux.die.net/man/7/signal aynı bilgiler, ancak tablolar okumak zordur.
Ancak, sinyallerle ilgili bir deneyim olmadan, pratikte ne yaptıklarını kısa açıklamalardan bilmek zor, işte benim yorumum:
Klavyeden tetiklendi
SIGINT
vurduğunda olur CTRL+C
.
SIGQUIT
tarafından tetiklenir CTRL+\
ve çekirdek dökülür.
SIGTSTP
vurduğunuzda programınızı askıya alır CTRL+Z
. Bunun aksine SIGSTOP
, programların, vi
kendilerini askıya almadan önce terminali güvenli bir duruma getirme şansı gibi programları verir .
Terminal etkileşimleri
SIGHUP
("takılma"), programınız çalışırken xterm'inizi kapattığınızda (veya terminalin bağlantısını kesdiğinizde) olan şeydir.
SIGTTIN
ve SIGTTOU
arka planda çalışırken terminalden okumaya veya terminale yazmaya çalışırsa programınızı duraklatın. Bunun için SIGTTOU
, programın /dev/tty
sadece standart stdout'a değil, yazması gerektiğini düşünüyorum .
Bir CPU istisnası tarafından tetiklendi
Bunlar, programınızın yanlış bir şey yapmaya çalıştığı anlamına gelir.
SIGILL
yasadışı veya bilinmeyen bir işlemci talimatı anlamına gelir. Örneğin, işlemci G / Ç bağlantı noktalarına doğrudan erişmeye çalıştıysanız bu olabilir.
SIGFPE
bir donanım matematik hatası olduğu anlamına gelir; büyük olasılıkla program sıfıra bölmeye çalıştı.
SIGSEGV
programınızın eşlenmemiş bir hafıza bölgesine erişmeye çalıştığı anlamına gelir.
SIGBUS
programın belleğe başka bir şekilde yanlış girdiği anlamına gelir; Bu özete ilişkin ayrıntılara girmeyeceğim.
Süreç etkileşimi
SIGPIPE
Borunun okuyucusu uçlarını kapattıktan sonra bir boruya yazmaya çalışırsanız olur. Bakın man 7 pipe
.
SIGCHLD
Yarattığınız bir çocuk işlemi ya sona erdiğinde ya da askıya alındığında olur (tarafından SIGSTOP
veya benzer şekilde).
Kendi kendine sinyal verme için kullanışlıdır
SIGABRT
genellikle abort()
işlevi çağıran programdan kaynaklanır ve varsayılan olarak bir çekirdek dökümüne neden olur. Bir "panik butonunun" sıralaması.
SIGALRM
kaynaklanır alarm()
çekirdek bir teslim neden olacak sistem çağrısı, SIGALRM
saniye belirli bir sayıda sonra programa. Bkz man 2 alarm
ve man 2 sleep
.
SIGUSR1
ve SIGUSR2
programın sevdiği ancak kullanılır. İşlemler arasında sinyal göndermede faydalı olabilirler.
Yönetici tarafından gönderildi
Bu sinyaller genellikle komut isteminden, kill
komut aracılığıyla veya fg
veya bg
durumunda gönderilir SIGCONT
.
SIGKILL
ve SIGSTOP
engellenemez sinyaller. İlki her zaman süreci derhal sonlandırır; ikincisi süreci askıya alır.
SIGCONT
askıya alınmış bir işlemi sürdürür.
SIGTERM
bir yakalanabilir sürümüdür SIGKILL
.