プロセスとジョブの違いを理解しよう!

目次

プロセスとは?

プロセスは、カーネル(オペレーティングシステムの中心部分)から見た作業の単位です。
プログラムが実行されるたびに、カーネルはそのプログラムを管理する「プロセス」を作成します。

プロセスは、実際に動作している「作業者」のような存在です。
たとえば、Webブラウザを起動すると、カーネルはそのブラウザに対応するプロセスを生成し、
システムリソースを割り当てて管理します。

具体例

  • Webブラウザを起動:ブラウザがプロセスとなり、システム上で動作する。
  • 音楽アプリで曲を再生:アプリがプロセスとしてシステム内で動き、曲が再生される。

ジョブとは?

一方、ジョブシェル(コマンドラインインターフェース)から見た作業の単位です。
ジョブは、シェルが実行するプロセスのセットやタスクです。

特にシェルで起動したプロセスやそのグループを指し、バックグラウンドで動作する場合が多いです。
つまり、ジョブはシェルが管理するプロセスやタスクのまとめと考えると良いでしょう。

具体例

  • ファイルのコピー:コピー操作がジョブとしてバックグラウンドで進行し、ユーザーが他の作業を並行して行えるようになる。
  • ソフトウェアのダウンロード:ダウンロード操作がジョブとなり、他の操作を進めつつ裏で進行する。

プロセスとジョブの違い

簡単に言うと、プロセスはカーネルが管理する単位で、ジョブはシェルが管理する単位です。
ジョブは1つ以上のプロセスを含むことがあり、ユーザーがシェルを通じて実行した作業の進行状況を示します。

具体例の違い

  1. プロセス:例えば、Webブラウザが動作しているとき、そのブラウザの実行はカーネルから見たプロセスです。
  2. ジョブ:シェルからsleep 300 &というコマンドを実行した場合、それはシェルから見たジョブとなり、カーネルではそれに対応するプロセスが動作します。

実際にコマンドを試してみよう:プロセスとジョブの動作例

1. ps aux | grep sleep

このコマンドを実行すると、psが現在動いているプロセスを表示し、
その中からsleepコマンドを探すためにgrepが使われます。
ここで、psgrepはそれぞれ別々のプロセスですが、
これらを合わせて一つのジョブとしてシェルが管理しています。

2. sleep 300 &

&をつけてsleep 300を実行すると、シェルがこのコマンドをバックグラウンドジョブとして管理します。
このジョブに対応するプロセスがカーネルによって生成され、300秒間(5分間)実行され続けます。

3. kill [プロセスID]

ps aux | grep sleepでプロセスIDを確認し、そのIDを指定してkillコマンドを実行すれば、
その特定のプロセスを終了させることができます。これにより、バックグラウンドで動いていたジョブが停止します。

このように、プロセスはカーネル視点での単位、
ジョブはシェル視点での単位と覚えておくと理解がしやすくなります。

    目次