1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. プロセスへのシグナル送信について

中級

LinuC Level1 v10.0 対策コース(パート1)

LinuC Level1 v10.0 対策コース(パート1)12/39

プロセスへのシグナル送信について

こちらの記事ではシグナルの送信方法を解説します。シグナルを通知すると特定の動作をするように処理の中に指示を割り込ませることができます。プロセスに対してシグナルを送信することで外部からプロセスを終了させることができます。

プロセス

プロセスとはシステム内で実行されているプログラムのことです。 システム内では常に複数のプログラムが稼働しています。ユーザーがコマンド実行することでプロセスは生成され、処理を終えると消滅します。

ps # 現在実行されているプロセスを表示します
PID TTY          TIME CMD
  166 pts/2    00:00:00 bash
  358 pts/2    00:00:00 ps

シグナル

シグナルは、割り込みによってプロセスに特定の動作をするように通知することができる仕組みです。例えばあるプロセスに対してkillコマンドなどを実行するとします。すると特定のシグナルがプロセスに対して送信されます。通知を受け取ったプロセスは処理の途中でもその処理を中止し消滅します。デフォルトでプロセスを終了させる場合は、システムからSIGTERMがプロセスに対して送信されます。

ps aux # プロセス一覧からプロセスIDを確認
kill -l # killコマンドのオプション一覧
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 ...続く
kill シグナル番号 PID # シグナルとプロセスIDを指定して実行
kill シグナル番号 ジョブID # シグナルとジョブIDを指定して実行
kill -9 PID # コマンドを強制終了したい場合
kill -19 PID # プロセスの一時停止

主なシグナル

シグナル名シグナル番号説明
SIGHUP1端末の切断によるプロセスの終了
SIGINT2割り込みによるプロセスの終了
SIGILL4不正な命令
SIGKILL9プロセスを強制終了するシグナル
SIGUSR1, 210, 12ユーザーが定義したシグナル
SIGTERM15デフォルトでプロセスが終了
SIGCONT18一時停止プロセスの再開
SIGSTOP19プロセスの一時停止

killallコマンドは同じ名前のプロセスが存在する場合に使用可能です。プロセスIDは値が一意に割り当てられているため、killコマンドで一度に複数のプロセスを対象とすることがません。killallコマンドでプロセス名を指定した場合は複数のプロセスを一度に終了することができます。

ps aux # プロセス一覧からプロセス名を確認
kill -l # シグナル一覧を表示
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 ...続く
killall -9 プロセス名 # 複数のプロセスをまとめて終了

クリーンアップ

通常の処理を終える場合やSIGTERMがプロセスに対して送信された場合、プロセスが終了する前にプロセス自身が終了処理を行います。終了するための処理を行うことをクリーンアップと言います。クリーンアップでは使っていたリソースの開放やロックファイルの削除などを行います。

しかし、SIGKILLなどで強制終了した場合は、カーネル側で強制的に終了させられるためクリーンアップは行われません。

まとめ

こちらの記事ではシグナルについて解説しました。

プロセスとはシステム内で実行されているプログラムのことです。

シグナルとは、割り込みによってプロセスに特定の動作をするように通知することができる仕組みです。

終了するための処理のことをクリーンアップと言います。

記事の内容は理解できましたか?