:最初の2つ目の質問に答えるために、SIGSTOPとSIGKILLさえ、アプリケーションによってキャッチすることはできませんが、他のすべての信号缶SIGSEGV。このプロパティはデバッグに役立ちます。たとえば、適切なライブラリサポートSIGSEGVを使用すると、スタックバックトレースをリッスンして生成し、そのセグメンテーション違反が発生した場所を表示できます。
man 7 signalLinuxのコマンドラインから入力することにより、各信号の機能に関する公式の言葉(とにかく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。