Linuxにおけるプロセスとジョブの管理
プロセス管理
プロセスとは、動作中のプログラムをオペレーティングシステムが管理する基本単位です。 プログラムを実行すると新しいプロセスが生成されます。 いわば、プロセスは実行中のプログラム、または実行可能な状態のプログラムを一単位としたものであるともいえます。
psコマンド
プロセスには生存期間という概念があります。サーバープログラムなど常時稼働することで生存時間が長時間にわたるものや、多くのコマンドのように一瞬で結果を出力して終了するものもあります。 これらのプロセスを表示させたい場合はpsコマンドを用います。
書式: ps [オプション]
psオプション
psコマンドオプションは表示方式を変えるものが多く存在しています。
psオプション | 説明 |
a | 他ユーザーのプロセスを同時に表示します |
f | プロセスを階層(ツリー)表示します |
u | 表示ユーザーを指定します |
x | 実行中のプロセスを表示します |
e | 全てのプロセスを表示します |
-l | 詳細な情報を表示します |
-p PID | 指定したプロセスIDのプロセスを表示します |
-C プロセス名 | 指定した名前のプロセスを表示します |
-w | 長い行は折り返して表示されます |
topコマンド
topコマンドは実行中のプロセスを監視する役割を果たします。 画面が切り替わり、基本的にはCPU時間を消費している順に表示されます。 topコマンドを終了するにはQキーを押すことで終了できます。
killコマンド
killコマンドはプロセスを終了することが出来ます。 プロセスに対してシグナルを送信することで、命令によって終了や再起動などが行えます。
書式:kill -[シグナル名orシグナルID] プロセスID
また、シグナルにはシグナル名とシングルIDが付けられており、killコマンドにおいていずれかを指定する必要が出てきます。 シグナルの表記についてはkill -lコマンドにて確認ができます。 シグナルを指定した場合の書式が以下になります。
書式:kill -SIGシグナル名 プロセスID
多用するシグナル
kill -lコマンドにてシグナルを確認することができますが、その中でも特に使われやすいシグナルを挙げておきます。シグナル | シグナルID | 動作 |
HUP | 1 | ハングアップ(端末が制御不能もしくは切断による終了) |
INT | 2 | キーボードからの割り込み |
KILL | 9 | 強制終了 |
TERM | 15 | 終了(デフォルトの場合) |
CONT | 18 | 停止しているプロセスを再開 |
STOP | 19 | 一時停止 |
指定コマンド
プロセスを調べるコマンドでは通常のコマンドの頭文字にpがつくだけでプロセスのユーザーを指定できるコマンドがあります。今回ご紹介するのがpgrepコマンドとpkillコマンドです。
pgrepコマンド
pgrepコマンドはプロセスの実行ユーザーを指定することができます。 通常のgrepコマンドは文字列などを検索するコマンドですがpgrepコマンドはプロセス名を指定することでプロセスIDを出力することができます。
書式:pgrep [オプション] プロセス名
pgrepオプション
pgrepオプション | 説明 |
-u ユーザー名 | プロセスの実行ユーザーを指定します |
-g グループ名 | プロセスの実行グループを指定します |
pkillコマンド
pkillコマンドは指定したプロセス名にシグナルを送ることで終了させるコマンドです。 同じ動きをするコマンドにkillallコマンドがありますが今回は割愛します。
書式:pkill [オプション] [シグナル] プロセス名
pkillオプション
pkillオプション | 説明 |
-u ユーザー名 | プロセスの実行ユーザーを指定します |
-g グループ名 | プロセスの実行グループを指定します |
ジョブ管理
ジョブは、ユーザーがコマンドやプログラムをシェル上で実行するひとまとまりの単位のことになります。
ジョブには2種類に分けられており、フォアグラウンドとバックグラウンドがあります。
バックグラウンドで実行したい場合のみコマンドの追加を行います。
バックグラウンドジョブ
バックグラウンドジョブはジョブの終了を待たずにシェルを使うことができるため、処理に時間がかかるジョブなどが有効的に使えます。バックグラウンドで実行したい場合はコマンドラインの最後に「&」を加えます。下記はbackjobをバックグラウンドにて実行したい場合の例です。
書式:# backjob &
また、ログアウト時以降もプログラムを継続させたい場合は、nohupコマンドを使います。 離席する際のログアウト後も処理を行ってくれるコマンドになります。
書式:# nohup backjob &
ジョブの確認方法
実行中のジョブはjobsコマンドにて確認が行えます。
書式:# jobs
ジョブの変更
フォアグラウンドとバックグラウンドはコマンドにてジョブを切り替えることが可能です。 フォアグラウンドへの切り替えはfgコマンド、バックグラウンドへの切り替えはbgコマンドが使われます。 フォアグラウンドのジョブをバックグラウンドに切り替える時は必ずCtrl+Zキーにてジョブを一時停止させる必要があります。
書式:bg ジョブ番号
構文:
# tail -f /var/log/messages ←Ctrl+Zキー(停止キー)
[1]+ Stopped tail -f /var/log/messages
# bg 1
[1]+ tail -f /var/log/messages
バックグラウンドからフォアグラウンドに切り替えたい場合は同じようにfg+ジョブ番号の指定で実行可能です。