支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 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 ハングアップ(端末が制御不能もしくは切断による終了)
INT キーボードからの割り込み
KILL 強制終了
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+ジョブ番号の指定で実行可能です。