:最初の2つ目の質問に答えるために、SIGSTOP
とSIGKILL
さえ、アプリケーションによってキャッチすることはできませんが、他のすべての信号缶SIGSEGV
。このプロパティはデバッグに役立ちます。たとえば、適切なライブラリサポートSIGSEGV
を使用すると、スタックバックトレースをリッスンして生成し、そのセグメンテーション違反が発生した場所を表示できます。
man 7 signal
Linuxのコマンドラインから入力することにより、各信号の機能に関する公式の言葉(とにかくLinuxの場合)を利用できます。 http://linux.die.net/man/7/signalにも同じ情報がありますが、表は読みにくいです。
ただし、信号に関するある程度の経験がなければ、それらが実際に何をするのかを短い説明から知ることは難しいので、ここに私の解釈があります。
キーボードからトリガー
SIGINT
ヒットすると発生しますCTRL+C
。
SIGQUIT
によってトリガーされCTRL+\
、コアをダンプします。
SIGTSTP
を押すと、プログラムが中断されますCTRL+Z
。とは異なりSIGSTOP
、キャッチ可能であり、プログラムをvi
停止する前に端末を安全な状態にリセットする機会をプログラムに与えます。
ターミナルインタラクション
SIGHUP
(「ハングアップ」)は、プログラムの実行中にxtermを閉じる(または端末を切断する)と発生します。
SIGTTIN
またSIGTTOU
、バックグラウンドで実行中に端末から読み取りまたは書き込みを試みた場合、プログラムを一時停止します。そのSIGTTOU
ためには、プログラムが/dev/tty
デフォルトのstdoutだけでなく、に書き込む必要があると思います。
CPU例外によってトリガーされます
これらは、プログラムが何か間違ったことをしようとしたことを意味します。
SIGILL
違法または未知のプロセッサ命令を意味します。これは、たとえばプロセッサI / Oポートに直接アクセスしようとした場合に発生する可能性があります。
SIGFPE
ハードウェアの数学エラーがあったことを意味します。ほとんどの場合、プログラムはゼロで除算しようとしました。
SIGSEGV
プログラムがメモリのマップされていない領域にアクセスしようとしたことを意味します。
SIGBUS
プログラムが他の方法でメモリに誤ってアクセスしたことを意味します。この概要の詳細は説明しません。
プロセスの相互作用
SIGPIPE
パイプのリーダーが終端を閉じた後にパイプに書き込もうとすると起こります。をご覧くださいman 7 pipe
。
SIGCHLD
作成した子プロセスが終了するか、中断される(SIGSTOP
または同様の)場合に発生します。
自己シグナリングに便利
SIGABRT
通常、abort()
関数を呼び出すプログラムが原因で、デフォルトでコアダンプが発生します。「パニックボタン」の並べ替え。
SIGALRM
引き起こされるalarm()
カーネルが提供するようになりますシステムコール、SIGALRM
指定した秒数後にプログラムに。man 2 alarm
およびを参照してくださいman 2 sleep
。
SIGUSR1
そしてSIGUSR2
プログラムが好きしかし、使用されています。それらはプロセス間のシグナル伝達に役立つ可能性があります。
管理者から送信された
これらの信号は通常介して、コマンドプロンプトから送信されたkill
コマンド、またはfg
またはbg
の場合にはSIGCONT
。
SIGKILL
とSIGSTOP
は、ブロックできないシグナルです。最初は常にプロセスを直ちに終了します。2番目はプロセスを中断します。
SIGCONT
中断されたプロセスを再開します。
SIGTERM
は、のキャッチ可能なバージョンですSIGKILL
。