コンピュータサイエンスでは、信号は、Unix、Unixライクな、およびその他のPOSIX準拠のオペレーティングシステムのうちの1種類、通信プロセスが制限された方法があります。これは、非同期の通知メカニズムである、警告イベントに使用されるプロセスが発生しました。信号がプロセスに送信されると、オペレーティングシステムの割込み制御の正常な流れ、このときの処理は、任意の非アトミック動作が中断されます。プロセスは、信号処理機能が定義されている場合、そうでなければ、デフォルトのハンドラを実行し、実行されます。
ソフト割り込み信号(信号、及びショート用信号)が発生した非同期イベントの処理を通知するために使用されます。あなたは、ソフト割り込み信号がプロセス間でシステムを経由して送信され互いにキルを呼び出すことができます。カーネルはまたため、内部イベント、イベント通知処理の発生のプロセスにシグナルを送ることができます。信号が唯一のイベントを何が起こったかのプロセスを通知するために使用されることに注意してください、このプロセスは、任意のデータを転送することはありません。プロセス受信信号は様々な信号への異なるアプローチを持っています。治療の方法は、3つのカテゴリに分けることができる:最初の割り込みハンドラと同様であり、信号処理機能によって処理するための処理機能を指定することができ、処理されます。第2の方法は、信号を無視することで、信号がちょうど起きていない、何の治療法ではありません。第三の方法は、信号処理システムが保持され、このようなデフォルト動作のデフォルト値であり、デフォルトのアクションは、信号処理終了の最もことです。プロセスは、システムを介して信号呼び出し信号を処理するためのプロセスの動作を指定します。ソフト割り込み信号領域におけるプロセス・テーブルのエントリがあり、信号がプロセスに送信された信号に対して、各ビット対応のドメインは、対応するビットが設定されています。プロセスが同時に異なる信号のために確保することができ、見ることができますが、同じ信号のために、プロセスは、処理の前に来てどのように多くのを知りません。
セマフォ信号およびこれら2つの用語は、1つの単語だけ、時には我々は、これら2つのことを考えることは非常に簡単になりますがものではありませんが、それは2つの完全に異なる概念です。
- 信号は:システムまたは例外の状態を変更するには、ターゲット・プロセスに通知するために、ターゲット・プロセスへのユーザー、システム、またはプロセス情報が送信されます。通知プロセスは、イベントを生成します
- セマフォ:セマフォは特別な変数であり、その本質は、セマフォ重要なリソースの数、セマフォの値が上にあるどのくらいどのように多くの、多くの、そのすべてのアトミック操作にアクセスするプロセス(PV操作を記録するカウンタであります、P:フットプリント、V:リリースリソース)。その役割は、協調プロセスが同時にクリティカルセクションがアクセスそれに唯一のプロセスであるように、共有リソースへのアクセスということです。(共有リソースへの協調プロセスへのアクセス用)の同期処理のための
次のような状況では、信号が発生する可能性があります
- キーボードイベント このようなSIGINT信号生成CTRL + C、CTRL + \ SIGQUIT生成された信号、CTRL + Z信号生成SIGTSTPとして
- ハードウェア例外 ハードウェア障害。0以外の不正アクセスメモリ(バーストエラー)、(浮動小数点例外)、メモリアライメントエラー(バスエラー)信号を生成するハードウェア及び通知カーネルによって検出され、カーネルは、次いで、実行されるゼロによる除算のように、プロセスに適切な信号を送ります。命令は、メモリアドレスにアクセスする不正プロセス、CPU演算部は、例外を生成カーネル信号がプロセスに送信されるように、例外が解釈されます。
- システムコール のkill、アボート、昇給システム関数呼び出しなど
- ソフトウェア条件 タイマーのアラームを使用して
- システム・コマンド・ キル
信号は、信号が到着したときに、現在の実行環境の保存、信号処理機能を実行するためにターンシグナルハンドラが完了したときに、復旧サイトは、引き続き、非同期イベントです。
プロセス信号は、3つの処理モードを受信しました
- デフォルト:デフォルトのアクションは、それがSIGINTシステムであれば、このプロセスは中断され、信号処理を実行します
- 無視:私たちは、信号を扱うしていない、SIGKILL SIGSTOPを無視することはできません見ないふり
- キャプチャと処理:信号が来たときに、機能を処理する信号を提供するために、私たち自身を書き込むための実行コードは、この処理機能を実行するために、ユーザーモードからの信号を処理するときに、スイッチにコアを必要とする(信号を捕捉し、このアクションは、我々が行わ必要です)SIGKILL SIGSTOPをキャプチャすることはできません
信号をサインアップ
typedef void (* sighandler_t) (int);
sighandler_t signal (int signum /*要注册的信号*/, sighandler_t handler /*信号执行函数*/);
信号キャプチャ
- (1)まず、ユーザは、通常、例外を処理するために直接カーネルモードに起因する割り込み、例外またはシステムコールに、メイン制御フローで行われます
- (2)カーネルがユーザモードに戻る準備ができて異常処理され、現在のプロセスは、信号処理にハンドオーバするがあれば到達できない信号が存在しない参照することの前に、
- (3)信号処理機能は、ユーザ定義実行するためにユーザ・モード・ユーザー定義の信号処理機能に復帰する場合
- (4)信号処理機能を実行した後、システムは、カーネルモードに再び特定の関数呼び出しsigreturnを呼び出す、システム行うコール
- (5)このシステムコールが完了した後、それがメインの制御フローに戻りますが中断場所で次のコードを実行し続け
- (6)ときに実行のメイン制御フロー例外が再び発生した場合、割り込みまたはシステムコールは、以下の手順を続行し、(1)に戻り続けます
信頼性と信頼性の低い信号信号
リアルタイム信号は:信頼性の高い信号である
非リアルタイム信号の:信頼できない信号
信頼性のない信号
- 1-31は、信号損失現象があるだろう、信頼性がありません
- 以前のUnixの信号から継承されたLinuxの信号、Unixのの欠陥信号
- 信号処理機能が終了すると、デフォルトモードに信号処理リセット(Linuxは改善しています)
- 信号の損失があるでしょう、信号がラインアップされません
信頼性の高い信号
- 信号は、34から64まで再設計を設定します
- 信号が失われたサポートラインではありません、信号処理機能が終了し、処理モードをデフォルトに戻しません。
[]キル-l あなたはそれが今の信号である信号のすべてを見ることができるコマンドが65に増えましたが、ここで私が言及したい、33-64これらの信号は、これを使用することから、一般的ではない信頼性の高い信号を区別することで、信頼性のない信号32の新しく追加された信号。
cll@cll-linux:~ $ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[男7信号] このためにコマンドが7ページ目では、マニュアルを参照するために男を使用するため、直接使用の男7。一般的な標準信号を次のように
Standard signals
Linux supports the standard signals listed below. Several signal num‐
bers are architecture-dependent, as indicated in the "Value" column.
(Where three values are given, the first one is usually valid for alpha
and sparc, the middle one for x86, arm, and most other architectures,
and the last one for mips. (Values for parisc are not shown; see the
Linux kernel source for signal numbering on that architecture.) A -
denotes that a signal is absent on the corresponding architecture.)
First the signals described in the original POSIX.1-1990 standard.
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at terminal
SIGTTIN 21,21,26 Stop Terminal input for background process
SIGTTOU 22,22,27 Stop Terminal output for background process
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
Next the signals not in the POSIX.1-1990 standard but described in
Manual page signal(7) line 134 (press h for help or q to quit)
上記信号において、
プログラムは、ブロックをキャプチャするか、信号を無視することはできません | 9)SIGKILL、19)SIGSTOP |
信号のデフォルトの動作に戻りませ | 4)SEAL、5)SIGTRAP |
デフォルトでは、プロセス信号の流産につながります | 6)SIGABRT、7)SIGBUS、8)SIGFPE、4)シール、29)SIGIO、3)SIGQUIT、11)SIGSEGV、5)SIGTRAP、24)SIGXCPU、25)SIGXFSZ |
デフォルトでは、出口に信号処理につながります | 14)SIGALRM、1)SIGHUP、2)SIGINT、9)SIGKILL、13)SIGPIPE、イベントをポーリング可能デバイスに送信されるSIGPOLL(送り、システムの一部)、27)SIGPROF、31)SIGSYS、15)SIGTERM、 10)SIGUSR1,12)SIGUSR2,26)SIGVTALRM |
デフォルトでは、停止する信号処理につながります | 19)SIGSTOP、20)SIGTSTP、21)SIGTTIN、22)SIGTTOU |
デフォルトのプロセスがシグナルを無視します | 17)SIGCHLD、30)SIGPWR、23)シグルズ、28)SIGWINCH |
- また、SIGIOはSVR4出口で、4.3BSDでは無視されています。
- SIGCONTは、それ以外の場合は無視され、ブロックすることができない、プロセスにハングアップし続けることです。
デフォルトの動作:
- 期間:プロセスを終了
- IGN:信号を無視(デフォルト瞬間は、信号処理の種類を無視)
- コア:コア・ファイルを生成し、プロセスを終了します。(識別プロセスは、死のデバッグするためのGDBの原因となります)
- 停止:停止(一時停止)プロセス
- 続き:実行中のプロセスを続行します
キル、killallを、キル(pid_t pidを、int型SIG)。
キル、killallを
この2つのコマンドは、プロセスにシグナルを送信するために使用されています。killallをプロセス名を必要としながら、killコマンドは、引数としてプロセス番号が必要です。さらに、これらの二つのコマンドの後に、パラメータとして、送信信号数に加えてもよいです。デフォルトでは、それらが関連するプロセス信号15(TERM)に送信されます。あなたはPID 666でプロセスを終了したい場合は、次のコマンドを入力します。
kill 666
あなたはそれが9(SIGKILL)を信号送信する場合は、次のコマンドを入力します。
kill -9 666
あなたはコマンド名を終了するためのプロセスを知りたいとします。あなたは、その名前によってそれを終了することができますが、プロセスのプロセスIDを見つけるには、psを使用する必要はありません。
killall -9 your-process-name
キル(pid_t pidを、int型SIG)。
任意のプロセス・グループまたはプロセスに信号を送信します。
ヘッダファイルの使用法:
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
パラメータ:
PID:4つの可能なオプションがあります。
- 1. pidがゼロより大きい場合、PID識別信号がプロセスに送信されます。
- 信号が同じグループおよび使用プロセスの呼び出しが殺すこと()プロセスに属するすべてに送信される場合2. PIDがゼロに等しいです。
- 3. pidが-1に等しく、信号は、プロセス1(INIT)に加えて、プロセスに呼び出しプロセスの全てに信号を送信する権利を送信します。
- 4. pidが-1未満である場合、信号はIDが-pidのプロセス・グループに送信されます。
SIG:レディ信号送信されたコードは、その値には、信号が送信されない場合はゼロであるが、システムは、多くの場合、プロセスはまだ実行されているかどうかを確認するためにゼロのSIG値を使用し、エラーチェックを行います。