Kill コマンド信号の完全なソリューション

$ 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 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 
3 4) シグトミン 35) シグトミン+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

信号番号 信号名 意味
0 出口  プログラムの終了時に受信されます。
1 HUP 電話回線または端末接続を切断するハングアップ信号。この信号により、一部のプロセスが終了せずに再初期化される場合もあります。
2 INT これはプロセスを終了することを意味しますが、必須ではありません。一般的に使用される「Ctrl+C」キーの組み合わせは、kill -2 シグナルです。
3 やめる やめる。
9 殺す プロセスを強制終了します。つまり、プロセスを強制的に終了します。
11 言う  セグメンテーション違反。
15 学期 プロセスを正常に終了します。これは、kill コマンドのデフォルトのシグナルです。

キルオプション

オプション 説明する
-信号、
-s信号

送信する信号の名前、短縮名、または番号とその後にダッシュが続きます。たとえば、-SIGTERM、-TERM、または -15 です。

利用可能なシグナルのリストを表示するには、-l または -L オプション (下記を参照) を使用するか、Linux シグナルのリストを参照してください。

ピド 数値のプロセス ID。プロセスの PID がわからない場合は、ps -aux などの ps コマンドを使用してリストします。
-l、--list[=信号] 利用可能な信号名をリストします。すべてのシグナル名をリストするには、-l または --list を使用します。--list=signal を使用すると、数値をシグナル名に変換します。
-L、--テーブル 利用可能な信号名と番号を表にリストします。

このリストで、1 から 31 までの番号が付けられた信号は、従来の UNIX でサポートされている信頼性の低い信号 (非リアルタイム) であり、32 から 63 の番号が付けられた信号は後に拡張され、信頼性の高い信号 (リアルタイム 信号) と呼ばれます。信頼できない信号と信頼できる信号の違いは、前者はキューイングをサポートしておらず、信号損失が発生する可能性があるのに対し、後者はサポートしていないことです。

以下では、SIGRTMIN より小さい数値を持つシグナルについて説明します。

1) SIGHUP
この信号は、ユーザー端末の接続 (正常または異常) の最後、通常は端末制御プロセスの最後に送信され、同じセッション内の各ジョブに通知され、制御に関連付けられなくなります。ターミナル。

Linux にログインすると、システムはログイン ユーザーに端末 (セッション) を割り当てます。フォアグラウンド プロセス グループとバックグラウンド プロセス グループを含む、この端末上で実行されているすべてのプログラムは、通常、このセッションに属します。ユーザーが Linux からログアウトすると、フォアグラウンド プロセス グループと端末に出力するバックグラウンド プロセスが SIGHUP シグナルを受信します。このシグナルのデフォルトのアクションはプロセスを終了することであるため、フォアグラウンド プロセス グループとバックグラウンドでの端末出力を持つプロセスが終了されます。ただし、この信号はキャプチャできます。たとえば、wget は SIGHUP 信号をキャプチャして無視できるため、Linux からログアウトした場合でも、wget はダウンロードを続行できます。

さらに、この信号は、デーモンが端末から切断されたときに構成ファイルを再読み取るようにデーモンに指示するために使用されます。

2) SIGINT
プログラム終了 (割り込み) 信号は、ユーザーが INTR 文字 (通常は Ctrl-C) を入力すると発行され、フォアグラウンド プロセス グループにプロセスを終了するように通知するために使用されます。

3) SIGQUIT は
SIGINT に似ていますが、QUIT 文字 (通常は Ctrl-/) によって制御されます。プロセスは、SIGQUIT を受信して​​終了するときにコア ファイルを生成します。これは、この意味でプログラム エラー信号に似ています。

4) SIGILL が
不正な命令を実行しました。通常は、実行可能ファイル自体にエラーがあるか、データ セグメントを実行しようとしていることが原因です。このシグナルは、スタック オーバーフローの場合にも生成されることがあります。

5) SIGTRAP は
ブレークポイント命令またはその他のトラップ命令によって生成され、デバッガによって使用されます。

6) SIGABRT は、
アボート関数によって生成されたシグナルを呼び出します。

7) SIGBUS の
不正なアドレス (メモリ アドレス アライメント エラーを含む)。たとえば、4 ワードの整数にアクセスしますが、そのアドレスは 4 の倍数ではありません。SIGSEGV との違いは、後者は正当なストレージ アドレスへの不正なアクセス (独自のストレージ スペースや読み取り専用ストレージ スペースに属さないアクセスなど) によってトリガーされることです。

8) SIGFPE は、
浮動小数点演算エラーだけでなく、オーバーフローや 0 除算などのすべての算術エラーが発生した場合に発行されます。

9) SIGKILL は
プログラムの実行を即座に終了するために使用されますが、このシグナルはブロックしたり、処理したり、無視したりすることはできません。管理者は、プロセスを終了できないと判断した場合、このシグナルの送信を試みることができます。

10) SIGUSR1 は
ユーザー使用のために予約されています

11) SIGSEGV は、
自身に割り当てられていないメモリにアクセスしようとしたり、書き込み権限のないメモリ アドレスにデータを書き込もうとしたりします。

12) SIGUSR2
はユーザー使用のために予約されています

13) SIGPIPE
パイプが破損しています。この信号は通常、プロセス間通信で生成されます。たとえば、FIFO (パイプライン) 通信を使用する 2 つのプロセスは、読み取りパイプが開かれていないか予期せず終了した場合にパイプに書き込み、書き込みプロセスが SIGPIPE 信号を受信します。また、Socket通信を利用した2つのプロセスは、書き込みプロセスがSocketに書き込みを行っている時点で、読み込みプロセスは終了しています。

14) SIGALRM
クロックタイミング信号で、実際の時刻またはクロック時刻を計算し、アラーム機能で使用します。

15) SIGTERM
プログラム終了 (終了) シグナル。このシグナルはブロックおよび処理できる点で SIGKILL とは異なります。通常、プログラムを正常に終了するように要求するために使用され、シェル コマンド kill はデフォルトでこのシグナルを生成します。プロセスを終了できない場合は、SIGKILL を試します。

17) SIGCHLD
子プロセスが終了すると、親プロセスはこのシグナルを受け取ります。

親プロセスがこのシグナルを処理せず、子プロセスを待たない場合、子プロセスは終了してもカーネルプロセステーブルのエントリを占有したままとなり、このときの子プロセスをゾンビプロセスと呼びます。この状況は回避する必要があります (親プロセスが SIGCHILD シグナルを無視するかキャッチするか、派生した子プロセスを待つか、親プロセスが先に終了し、子プロセスの終了が init プロセスによって自動的に引き継がれます)。 。

18) SIGCONT
を使用すると、停止したプロセスが実行を継続できます。この信号はブロックできません。プログラムが停止状態から変更されて実行を継続するときに、ハンドラーを使用してプログラムが特定の作業を完了できるようにすることができます。たとえば、プロンプトを再表示します。

19) SIGSTOP は
プロセスの実行を停止 (停止) します。終了や割り込みとの違いに注意してください: プロセスはまだ終了していません。実行を一時停止しているだけです。この信号はブロックしたり、処理したり、無視したりすることはできません。

20) SIGTSTP は
プロセスの実行を停止しますが、シグナルは処理および無視できます。このシグナルは、ユーザーが SUSP 文字 (通常は Ctrl-Z) を入力したときに送信されます。

21) SIGTTIN
バックグラウンド ジョブがユーザー端末からデータを読み取りたい場合、ジョブ内のすべてのプロセスは SIGTTIN シグナルを受信し、デフォルトでは、これらのプロセスは実行を停止します。

22) SIGTTOU は
SIGTTIN に似ていますが、端末に書き込むとき (または端末モードを変更するとき) に受信されます。

23) SIGURG は
、「緊急」データまたは帯域外データがソケットに到着すると生成されます。

24) SIGXCPU
CPU 時間リソース制限を超えました。この制限は getrlimit/setrlimit によって読み取り/変更できます。

25) SIGXFSZ
プロセスがファイルを拡張しようとして、ファイル サイズのリソース制限を超えたとき。

26) SIGVTALRM
仮想クロック信号 SIGALRM と似ていますが、プロセスが占有する CPU 時間を計算します。

27) SIGPROF は
SIGALRM/SIGVTALRM に似ていますが、プロセスによって使用される CPU 時間とシステム コールの時間が含まれます。

28) SIGWINCH
ウィンドウ サイズが変更されたときに送信されます。

29) SIGIO
ファイル記述子は入出力操作の準備ができています。

30) SIGPWR
停電

31) SIGSYS
不正なシステム コール。

上記のシグナルのうち、プログラムによってキャプチャ、ブロック、または無視できないシグナルは次のとおりです。 SIGKILL、SIGSTOP デフォルトの
アクションに復元できないシグナルは次のとおりです。 SIGILL、SIGTRAP
デフォルトでプロセスを中止するシグナルSIGABRT、SIGBUS、SIGFPE、SIGILL、SIGIOT、SIGQUIT、SIGSEGV、SIGTRAP、SIGXCPU、SIGXFSZ プロセスを
終了させるデフォルトのシグナルは次のとおりです: SIGALRM、SIGHUP、SIGINT、SIGKILL、SIGPIPE、SIGPOLL、SIGPROF、SIGSYS、SIGTERM 、SIGUSR1、SIGUSR2、SIGVTALRM により、デフォルトでプロセスが停止します。
シグナルは、SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU です。デフォルトの
プロセスで無視されるシグナルは、SIGCHLD、SIGPWR、SIGURG、SIGWINCH です。

さらに、SIGIO は SVR4 で終了し、4.3BSD では無視されますが、SIGCONT はプロセスが一時停止されている場合は続行されますが、それ以外の場合は無視され、ブロックできません。 

https://www.cnblogs.com/gaoyuechen/p/7731916.html
https://www.jianshu.com/p/966d18eac17e

おすすめ

転載: blog.csdn.net/qq_23080741/article/details/119205621