Skip to main content

シグナル - Linux / Unixコマンド

ちょいちょい連killしながらまあまあなkillclipとれましたw (六月 2025)

ちょいちょい連killしながらまあまあなkillclipとれましたw (六月 2025)
Anonim

Linuxは、POSIXの信頼性の高い信号(以下、「標準信号」といいます)とPOSIXのリアルタイム信号の両方をサポートします。

標準信号

Linuxは以下の標準信号をサポートしています。 「値」列に示されているように、いくつかの信号番号はアーキテクチャに依存しています。 (3つの値が与えられている場合、最初はalphaとsparc、i386、ppc、shの場合は真ん中、mipsの場合は最後に有効です。

A-は、対応するアーキテクチャ上に信号が存在しないことを示す)。

表の「Action」列のエントリは、次のように信号のデフォルト動作を指定します。

期間

デフォルトのアクションは、プロセスを終了することです。

Ign

デフォルトの動作は、信号を無視することです。

コア

デフォルトのアクションは、プロセスを終了しコアをダンプすることです。

やめる

デフォルトのアクションは、プロセスを停止することです。

まず、元のPOSIX.1標準で記述されているシグナル。

信号アクションコメント
または制御プロセスの死
SIGINT2期間キーボードからの割り込み
SIGQUIT3コアキーボードから終了する
SIGILL4コア違法命令
SIGABRT6コアシグナルを中止する アボート (3)
SIGFPE8コア浮動小数点例外
SIGKILL9期間キル信号
SIGSEGV11コア無効なメモリ参照
SIGPIPE13期間壊れたパイプ:読者がいないパイプに書き込む
SIGALRM14期間からのタイマー信号 警報 (2)
SIGTERM15期間終了信号
SIGUSR130,10,16期間ユーザ定義信号1
SIGUSR231,12,17期間ユーザ定義信号2
SIGCHLD20,17,18Ign子供が停止または終了した
SIGCONT19,18,25 停止したら続行
SIGSTOP17,19,23やめるプロセスを停止する
SIGTSTP18,20,24やめるttyで停止します
シグニティン21,21,26やめるバックグラウンドプロセスのtty入力
SIGTTOU22,22,27やめるバックグラウンドプロセスのtty出力

信号SIGKILL そしてSIGSTOP キャッチ、ブロック、または無視することはできません。

次に、POSIX.1規格ではないが、SUSv2とSUSv3 / POSIX 1003.1-2001に記述されている信号。

信号アクションコメント
SIGPOLL 期間ポーリング可能イベント(Sys V)。 SIGIOの同義語
SIGPROF27,27,29期間プロファイリングタイマーの有効期限切れ
SIGSYS12,-,12コアルーチンへの引数が不正(SVID)
SIGTRAP5コアトレース/ブレークポイントトラップ
SIGURG16,23,21Ignソケットの緊急状態(4.2 BSD)
SIGVTALRM26,26,28期間仮想アラームクロック(4.2 BSD)
SIGXCPU24,24,30コアCPU時間制限を超えました(4.2 BSD)
SIGXFSZ25,25,31コアファイルサイズの上限を超えました(4.2 BSD)

Linux 2.2以降のデフォルトの動作SIGSYS, SIGXCPU, SIGXFSZ、および(SPARCおよびMIPS以外のアーキテクチャの場合)SIGBUS プロセスを終了させることでした(コアダンプなし)。 (他のUnixでは、SIGXCPU そしてSIGXFSZ コアダンプなしでプロセスを終了することです)。Linux 2.4は、これらのシグナルのPOSIX 1003.1-2001の要件に準拠しており、コアダンプを使用してプロセスを終了します。

次に様々な信号。

信号アクションコメント
SIGEMT7,-,7期間
SIGSTKFLT-,16,-期間コプロセッサのスタック障害(未使用)
SIGIO23,29,22期間I / Oが可能になりました(4.2 BSD)
SIGCLD-,-,18IgnSIGCHLDの同義語
SIGPWR29,30,19期間停電(システムV)
SIGINFO29,-,- SIGPWRの同義語
SIGLOST-,-,-期間ファイルロックが失われました
SIGWINCH28,28,20Ignウィンドウサイズ変更信号(4.3 BSD、Sun)
SIGUNUSED-,31,-期間未使用の信号(SIGSYSになります)

(信号29はSIGINFO / SIGPWR アルファSIGLOST sparcで。)

SIGEMT POSIX 1003.1-2001では指定されていませんが、ほとんどの他のUnixではデフォルトでコアダンプを使用してプロセスを終了させます。

SIGPWR (POSIX 1003.1-2001には指定されていません)は、表示される他のUnixではデフォルトでは通常無視されます。

SIGIO (POSIX 1003.1-2001で指定されていない)は、いくつかの他のUnixではデフォルトでは無視されます。

リアルタイム信号

Linuxは、もともとPOSIX.4のリアルタイム拡張で定義されたリアルタイム信号をサポートしています(POSIX 1003.1-2001にも含まれています)。 Linuxは32個のリアルタイム信号をサポートしています(番号は32からSIGRTMIN)〜63(SIGRTMAX)。 (プログラムは常に表記法を使用してリアルタイム信号を参照する必要がありますSIGRTMIN+ n、リアルタイム信号番号の範囲はUnixによって異なります)。

リアルタイム信号には、標準信号とは異なり、あらかじめ定義された意味がありません。リアルタイム信号のセット全体をアプリケーション定義の目的に使用できます。 (ただし、LinuxThreadsの実装では、最初の3つのリアルタイム信号が使用されます)。

未処理のリアルタイム信号に対するデフォルトのアクションは、受信プロセスを終了することです。

リアルタイム信号は、次のように区別されます。

  1. リアルタイム信号の複数のインスタンスをキューに入れることができます。対照的に、標準信号の複数のインスタンスが配信されているときにその信号が現在ブロックされている場合は、1つのインスタンスのみがキューに入れられます。
  2. 信号がシグキュー(2)の場合、付随する値(整数またはポインタのいずれか)を信号と共に送ることができる。受信プロセスがこの信号のハンドラを確立する場合、SA_SIGACTION 〜への旗sigaction(2)を介してこのデータを得ることができる。 si_value のフィールド siginfo_t 構造体は第2引数としてハンドラに渡されます。さらに、 si_pid そして si_uid この構造のフィールドを使用して、シグナルを送信するプロセスのPIDと実際のユーザーIDを取得できます。
  3. リアルタイム信号は、保証された順序で配信されます。同じタイプの複数のリアルタイム信号は、送信された順に配信されます。異なるリアルタイム信号がプロセスに送信された場合、信号は最も小さい番号の信号から順番に配信されます。 (つまり、番号の小さい信号が優先されます)。

標準シグナルとリアルタイムシグナルの両方がプロセスに対して保留中の場合、POSIXは指定されていないものを最初に配信します。 Linuxは、他の多くの実装と同様に、この場合は標準信号を優先します。

POSIXによれば、実装は少なくとも_POSIX_SIGQUEUE_MAX(32)のリアルタイムシグナルをプロセスにキューイングできるようにすべきです。しかし、プロセスごとの制限を設けるのではなく、Linuxはすべてのプロセスのキューに入れられたリアルタイム信号の数にシステム全体の制限を課します。

この制限は、(および権限付きで) / proc / sys / kernel / rtsig-max ファイル。関連ファイル、 / proc / sys / kernel / rtsig-max 現在どのくらい多くのリアルタイム信号が待ち行列に入っているか調べることができます。

準拠

POSIX.1

重要: 使用 おとこ コマンド( % おとこ 特定のコンピュータでどのようにコマンドが使用されているかを確認することができます。