プロセスとは?
プロセスは、カーネル(オペレーティングシステムの中心部分)から見た作業の単位です。
プログラムが実行されるたびに、カーネルはそのプログラムを管理する「プロセス」を作成します。
プロセスは、実際に動作している「作業者」のような存在です。
たとえば、Webブラウザを起動すると、カーネルはそのブラウザに対応するプロセスを生成し、
システムリソースを割り当てて管理します。
具体例
- Webブラウザを起動:ブラウザがプロセスとなり、システム上で動作する。
- 音楽アプリで曲を再生:アプリがプロセスとしてシステム内で動き、曲が再生される。
ジョブとは?
一方、ジョブはシェル(コマンドラインインターフェース)から見た作業の単位です。
ジョブは、シェルが実行するプロセスのセットやタスクです。
特にシェルで起動したプロセスやそのグループを指し、バックグラウンドで動作する場合が多いです。
つまり、ジョブはシェルが管理するプロセスやタスクのまとめと考えると良いでしょう。
具体例
- ファイルのコピー:コピー操作がジョブとしてバックグラウンドで進行し、ユーザーが他の作業を並行して行えるようになる。
- ソフトウェアのダウンロード:ダウンロード操作がジョブとなり、他の操作を進めつつ裏で進行する。
プロセスとジョブの違い
簡単に言うと、プロセスはカーネルが管理する単位で、ジョブはシェルが管理する単位です。
ジョブは1つ以上のプロセスを含むことがあり、ユーザーがシェルを通じて実行した作業の進行状況を示します。
具体例の違い
- プロセス:例えば、Webブラウザが動作しているとき、そのブラウザの実行はカーネルから見たプロセスです。
- ジョブ:シェルから
sleep 300 &
というコマンドを実行した場合、それはシェルから見たジョブとなり、カーネルではそれに対応するプロセスが動作します。
実際にコマンドを試してみよう:プロセスとジョブの動作例
1. ps aux | grep sleep
このコマンドを実行すると、ps
が現在動いているプロセスを表示し、
その中からsleep
コマンドを探すためにgrep
が使われます。
ここで、psとgrepはそれぞれ別々のプロセスですが、
これらを合わせて一つのジョブとしてシェルが管理しています。
2. sleep 300 &
&
をつけてsleep 300
を実行すると、シェルがこのコマンドをバックグラウンドジョブとして管理します。
このジョブに対応するプロセスがカーネルによって生成され、300秒間(5分間)実行され続けます。
3. kill [プロセスID]
ps aux | grep sleep
でプロセスIDを確認し、そのIDを指定してkill
コマンドを実行すれば、
その特定のプロセスを終了させることができます。これにより、バックグラウンドで動いていたジョブが停止します。
このように、プロセスはカーネル視点での単位、
ジョブはシェル視点での単位と覚えておくと理解がしやすくなります。