こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はUNIXにおけるプロセスとジョブという概念について話していきたいと思います。
プロセスとジョブを理解していく上での前提知識
以下では、プロセスとジョブをより深く理解していくために、これら2つを含めたいくつかの単語について説明していきます。
プログラム
プログラムとは、コンピュータが機能を実行できるように、命令が記述されたもののことです。
CPU
CPU(Central Processing Unit)とは、中央処理装置のことです。コンピュータの中枢となる装置で、人間でいうと脳に当たります。故にコンピュータの性能を決めるうえで一番重要な部分になります。基本的にはコンピュータ全体の制御や演算を行います。
メモリ
メモリとは、データを一時的に記憶できる場所のことです。このメモリの容量が大きい程、複数のソフトウェアを同時に開きながら、効率よく作業を行うことができます。
プロセス
プロセスとは、実行中のプログラムのことです。この時、プログラムがメモリ上に配置されて、CPUがそれを実行しています。
シェル
シェルとは、ユーザの入力を実行するプロセスのことです。もう少しわかりやすく言うと、人間からの入力をコンピュータに伝えるプログラムです。OSの中心部(カーネル)を包み込むように存在し、ソフトウェアとカーネルの間の橋渡しをします。
ジョブ
ジョブとは、一連のプロセスのまとまりのことです。シェルではジョブ単位で実行が制御されます。
プロセスの状態を確認しよう
以下では上でざっくりと説明したプロセスについてもう少し詳しく説明していきます。
psコマンド
$ps (lux) ※カッコ内はオプションなので任意
上のようにpsコマンドを実行すると現在のプロセスの状態を表示してくれます。
以下にオプションについての説明を加えておきます。
l......詳細を表示します。
u......ユーザ指向のフォーマットを表示します。
x......端末制御のないプロセスも表示します。
※他にもオプションは数多くあるので随時manコマンドで確認してみてください。
psコマンドで表示した用語の説明
psコマンドでプロセスの状態を確認していると見慣れない英大文字の羅列がたくさん見られます。以下では主なものについてそれぞれが何を表しているのか説明していきます。
PID.....プロセス識別子
PPID.....親プロセス識別子
UID.....ユーザ識別子
CMD.....起動したコマンドを表しています。
STAT.....プロセスの状態を表しています。Rなら実行中、Sならスリープ中であるということを表しています。
プロセスを終了する
プロセスを強制的に終了させる方法は2つあります。
1つ目はプログラム実行中にCtrlキーとCを同時に押すという方法です。
2つ目はkillコマンドを使う方法です。以下に例を挙げます。
$kill PID
PIDの部分は先ほど説明した通りプロセス識別子のことです。つまり、psコマンドで終了させたいプロセスのプロセス識別子を調べて、killコマンドの後に入力して実行するとプロセスが強制的に終了されます。
しかし、一般的にプロセスは勝手に終了する場合が多いので、どうしても終了させたいときに上の方法を使うといいです。
ジョブの状態を確認しよう
次にジョブについてもう少し深堀りしていきたいと思います。
フォアグラウンドとバックグラウンド
ジョブの説明に入る前に、ジョブの実行の仕方にはフォアグラウンドでの実行と、バックグラウンドでの実行の2種類があります。
ここでこの2つについて詳しく説明していると長くなるので、フォアグラウンドでジョブを実行した場合にはシェルはジョブの終了を待つ必要があるが、バックグラウンドでジョブを実行した場合はジョブの終了を待たずに次のプログラムを実行できるという感じで理解しておいてください(つまり複数のジョブを同時に実行できる)。
ちなみにバックグラウンドで実行したいときはコマンドの後ろに&をつけます。
ジョブを確認する
ジョブを確認したいときはjobsコマンドを使います。以下に1つ実行例を示します。
$jobs [1] - 実行中 man ls & [2] + 実行中 man cd &
上の出力結果を見てください。1番左にある番号がジョブ番号、その右にある+、-はそれぞれ、現在と直前のジョブであることを示します。
ジョブを終了する
ジョブを終了するにはプロセスを終了する場合と同じように、killコマンドを使ってあげるとよいです。以下で例を示します。
$kill %ジョブ番号
ここで2つ注意してほしいことがあります。1つ目はジョブ番号を指定する時はジョブ番号の前に%をつける必要があるということです。もう1つはジョブ番号なしでkillコマンドを実行すると現在のジョブが終了されるということです。
また、フォアグラウンドで実行しているジョブを終了したいときは、プロセスの終了と同じようにCtrlきーとCを同時に押してあげれば終了することができます。
まとめ
今回は聞きなれない単語が数多く出てきたと思います。実際に日常的に使うような単語ではないので分からないからといって落ちこむ必要はないです。
しかし、コンピュータを理解していくうえで非常に大事なことばかりなので理解を深めておいてください。
次回はUNIXにおいて頻繁に使うことになるテキストエディタ、Emacsについて発信していきます。
今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!