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 # プロセスの一時停止
主なシグナル
シグナル名 | シグナル番号 | 説明 |
---|---|---|
SIGHUP | 1 | 端末の切断によるプロセスの終了 |
SIGINT | 2 | 割り込みによるプロセスの終了 |
SIGILL | 4 | 不正な命令 |
SIGKILL | 9 | プロセスを強制終了するシグナル |
SIGUSR1, 2 | 10, 12 | ユーザーが定義したシグナル |
SIGTERM | 15 | デフォルトでプロセスが終了 |
SIGCONT | 18 | 一時停止プロセスの再開 |
SIGSTOP | 19 | プロセスの一時停止 |
killall
コマンドは同じ名前のプロセスが存在する場合に使用可能です。プロセスIDは値が一意に割り当てられているため、kill
コマンドで一度に複数のプロセスを対象とすることがません。killall
コマンドでプロセス名を指定した場合は複数のプロセスを一度に終了することができます。
ps aux # プロセス一覧からプロセス名を確認
kill -l # シグナル一覧を表示
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
...続く
killall -9 プロセス名 # 複数のプロセスをまとめて終了
クリーンアップ
通常の処理を終える場合やSIGTERMがプロセスに対して送信された場合、プロセスが終了する前にプロセス自身が終了処理を行います。終了するための処理を行うことをクリーンアップと言います。クリーンアップでは使っていたリソースの開放やロックファイルの削除などを行います。
しかし、SIGKILLなどで強制終了した場合は、カーネル側で強制的に終了させられるためクリーンアップは行われません。
まとめ
こちらの記事ではシグナルについて解説しました。
プロセスとはシステム内で実行されているプログラムのことです。
シグナルとは、割り込みによってプロセスに特定の動作をするように通知することができる仕組みです。
終了するための処理のことをクリーンアップと言います。
記事の内容は理解できましたか?