web-dev-qa-db-ja.com

ジョブとプロセスの違いは何ですか?

「ジョブ」と「プロセス」の違いは何ですか?

48
Olivier Lalonde

プロセスは、独自のアドレス空間を持つ実行中のプログラムです。

ジョブはシェルで使用される概念です。対話的に開始する、切り離さない(つまり、デーモンではない)プログラムはすべてジョブです。インタラクティブなプログラムを実行している場合は、 CtrlZ 一時停止します。その後、フォアグラウンド(fgを使用)またはバックグラウンド(bgを使用)で開始できます。

プログラムが中断またはバックグラウンドで実行されている間、別のプログラムを開始できます。これにより、2つのジョブが実行されます。次のように「&」を追加して、バックグラウンドで実行されているプログラムを開始することもできます:program &。そのプログラムはバックグラウンドジョブになります。実行中のすべてのジョブを一覧表示するには、jobsを使用できます。

ジョブの詳細については、bashのmanページの このセクション を参照してください。

47
Shawn J. Goff

UNIXには、「プロセス」、「プロセスグループ」、および「セッション」という別々の概念があります。

ログイン時に取得する各シェルは、独自の新しいセッションとプロセスグループのリーダーになり、端末の制御プロセスグループをそれ自体に設定します。

シェルは、起動する各「ジョブ」の現在のセッション内にプロセスグループを作成し、開始する各プロセスを適切なプロセスグループに配置します。例えば、 ls | headは、シェルが単一のジョブと見なし、単一の新しいプロセスグループに属する2つのプロセスのパイプラインです。

プロセスは、実行のスレッド(の集合)と、アドレス空間やファイル記述子テーブルなどの他のコンテキストです。プロセスは他のプロセスを開始できます。これらの新しいプロセスは、他のアクションが実行されない限り、親と同じプロセスグループに属します。各プロセスには、親と同じように開始する「制御端末」もある場合があります。

シェルには、「フォアグラウンド」ジョブと「バックグラウンド」ジョブの概念があります。フォアグラウンドジョブは端末を制御するプロセスグループであり、バックグラウンドジョブは端末を制御しないプロセスグループです。

各端末にはフォアグラウンドプロセスグループがあります。ジョブをフォアグラウンドに持ってくると、シェルはそれをターミナルのフォアグラウンドプロセスグループとして設定します。ジョブをバックグラウンドに配置すると、シェルはターミナルのフォアグラウンドプロセスグループを別のプロセスグループまたはそれ自体に設定します。

プロセスは、フォアグラウンドプロセスグループに属している場合、制御端末からの読み取りと制御端末への書き込みを行うことができます。それ以外の場合、端末からの読み取りおよび端末への書き込みの試行時に、それぞれSIGTTINおよびSIGTTOU信号を受け取ります。デフォルトでは、これらのシグナルはプロセスを中断しますが、ほとんどのシェルはSIGTTOUをマスクするため、バックグラウンドジョブは中断されずに端末に書き込むことができます。

30
ephemient

計算では、Jobは、作業単位または実行単位(上記の作業を実行する)です。 (作業単位としての)ジョブのコンポーネントは、タスクまたはステップと呼ばれます(ジョブストリームのように、順次の場合)。実行の単位として、ジョブは単一のプロセスで具体的に識別され、サブプロセス(子プロセス、親プロセスであるジョブに対応するプロセス)を持ち、タスクの作業を構成するタスクまたはステップを実行します。ジョブ;またはプロセスグループを使用します。または、Unixジョブコントロールのように、プロセスまたはプロセスグループへの抽象的な参照を使用します。

ソース

良い例

1
Premraj