Önce ikinci sorunuzu cevaplamak için: SIGSTOPve SIGKILLuygulama 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, SIGSEGVyalnızca bu segfault'un nerede olduğunu göstermek için bir yığın geriye izleme dinleyebilir ve oluşturabilirsiniz.
Her man 7 signalkomutun 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
SIGINTvurduğunda olur CTRL+C.
SIGQUITtarafından tetiklenir CTRL+\ve çekirdek dökülür.
SIGTSTPvurduğunuzda programınızı askıya alır CTRL+Z. Bunun aksine SIGSTOP, programların, vikendilerini 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.
SIGTTINve SIGTTOUarka planda çalışırken terminalden okumaya veya terminale yazmaya çalışırsa programınızı duraklatın. Bunun için SIGTTOU, programın /dev/ttysadece 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.
SIGILLyasadışı 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.
SIGFPEbir 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.
SIGBUSprogramı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
SIGPIPEBorunun okuyucusu uçlarını kapattıktan sonra bir boruya yazmaya çalışırsanız olur. Bakın man 7 pipe.
SIGCHLDYarattığınız bir çocuk işlemi ya sona erdiğinde ya da askıya alındığında olur (tarafından SIGSTOPveya benzer şekilde).
Kendi kendine sinyal verme için kullanışlıdır
SIGABRTgenellikle 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ı.
SIGALRMkaynaklanır alarm()çekirdek bir teslim neden olacak sistem çağrısı, SIGALRMsaniye belirli bir sayıda sonra programa. Bkz man 2 alarmve man 2 sleep.
SIGUSR1ve SIGUSR2programı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, killkomut aracılığıyla veya fgveya bgdurumunda gönderilir SIGCONT.
SIGKILLve SIGSTOPengellenemez 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.
SIGTERMbir yakalanabilir sürümüdür SIGKILL.