6. シグナル

Linux において、シグナルとは、重要なイベントが発生したことをプロセスに通知するために送信されるソフトウェア割り込みです。Linux シグナルを理解することは、プロセスとシステム動作を効果的に管理するための基本となります。

シグナルの目的

シグナルは、プロセス間通信(IPC)の主要な手段として機能します。その用途は多岐にわたります。

  • ユーザー操作: ユーザーは、フォアグラウンドプロセスを中断または一時停止するために、Ctrl-C (SIGINT) や Ctrl-Z (SIGTSTP) のような特殊なターミナル文字を入力できます。
  • カーネル通知: カーネルは、不正なメモリアクセス (SIGSEGV) のようなハードウェアまたはソフトウェアの問題を通知するために、プロセスにシグナルを送信できます。
  • プロセス管理: システム管理者や他のプロセスは、プロセスの終了要求や設定の再読み込みなど、他のプロセスのライフサイクルを管理するためにシグナルを使用します。

シグナルのライフサイクル

シグナルを生成するイベントが発生すると、まずターゲットプロセスに配信されます。シグナルは、カーネルがプロセスを実行するまで「保留中」の状態にとどまります。プロセスがスケジューリングされると、シグナルが配信されます。ただし、プロセスには特定のシグナルの配信をブロックするように設定できるシグナルマスクがあります。

シグナルが配信されると、プロセスはいくつかの動作のいずれかを選択できます。

  • シグナルを無視: プロセスはシグナルを破棄し、実行を続行します。
  • シグナルをキャッチ: プロセスは、イベントに応答するためにシグナルハンドラと呼ばれるカスタム関数を実行します。
  • デフォルトアクションの実行: キャッチも無視もされない場合、デフォルトのアクションが実行されます。多くのシグナルでは、これはプロセスの終了を意味します。
  • シグナルをブロック: シグナルがプロセスのシグナルマスク内にある場合、ブロックが解除されるまで保留状態のままになります。

一般的な Linux プロセスシグナル

各シグナルは整数で定義されますが、ほとんどの場合、SIGで始まるシンボル名(OS シグナルコード)で参照されます。数値はアーキテクチャによって若干異なる場合がありますが、名前は一貫しています。最も一般的なLinux プロセスシグナルをいくつか紹介します。

  • SIGHUP (1): ハングアップ。デーモンに設定ファイルを再読み込みするように伝えるためによく使用されます。
  • SIGINT (2): 中断。Ctrl-Cによって送信されます。プロセスを終了するための要求です。
  • SIGKILL (9): キル。これは即時かつ強制的な終了です。プロセスはこのシグナルをキャッチ、無視、またはブロックすることはできません。
  • SIGSEGV (11): セグメンテーション違反。プロセスが無効なメモリアクセスを行ったことを示します。
  • SIGTERM (15): 終了。これはプロセスに終了を依頼する標準的で丁寧な方法です。killコマンドによって送信されるデフォルトのシグナルです。プロセスは終了前にクリーンアップを実行するためにこのシグナルをキャッチできます。これはしばしばシグナル 15 Linuxと呼ばれます。
  • SIGSTOP: 停止。プロセスを一時停止します。SIGKILL と同様に、キャッチしたり無視したりすることはできません。

SIGTERMLinux シグナル 15)とSIGKILLの主な違いは、SIGTERMが処理可能な要求であるのに対し、SIGKILLはプロセスを即座に破壊するコマンドであるという点です。

ログインして学習進捗を保存

サインイン

演習

練習あるのみです!プロセスとシグナルの使用方法を理解を深めるための実践的なラボを以下に示します。

  1. Linux プロセスの管理と監視 - このラボでは、Linux システムでプロセスを管理および監視するための必須スキルを学習します。フォアグラウンドプロセスとバックグラウンドプロセスの操作、psを使用した検査、topを使用したリソースの監視、reniceを使用した優先度の調整、killを使用した終了について探ります。killを使用したプロセスの終了は、シグナル送信の直接的な応用です。

このラボは、プロセス管理の概念と、実際のシナリオにおけるシグナルの基礎的な使用法を適用し、Linux システム管理への自信を構築するのに役立ちます。

クイズ

ブロックできないシグナルは何ですか?英語で、正確なシグナル名を使用し、大文字と小文字に注意して回答してください。