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


回答:


46

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

ジョブとは、シェルで使用される概念です-対話的に起動しないプログラム(つまり、デーモンではない)はジョブです。対話型プログラムを実行している場合は、を押しCtrlZて中断できます。その後、フォアグラウンド(を使用fg)またはバックグラウンド(を使用bg)で開始できます。

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

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


私たちがしている時には、上記の例では、2つのジョブが実行されている私たちも持っている2つのプロセスが実行されている我々は、されていませんか?独自のアドレス空間の意味を詳しく説明していただけますか?どの場合、プログラムは独自のアドレス空間を持っていませんか?
ケニー

@Kennyはい、これらのtroジョブもプロセスになります。実際、すべてのジョブはプロセスです。仕事は彼女のセッションに関連しています。ttyから切り離されない、開始するすべてのプロセスは仕事です。
ショーンJ.ゴフ

@Kenny、プロセスに関して言えば、私がプログラムを言うとき、それは非常に一般的なことです-CPUが実行するための命令のセット。これは、タスクまたは実行のスレッドとも呼ばれます。プロセスは、アドレス空間を共有する別のスレッドを作成する場合があります。
ショーンJ.ゴフ

1
inなどのパイプコマンドls | sortはジョブですが、各コマンドは異なるサブシェルプロセスの子プロセスとして実行されます。これは、複数のプロセスで構成されるジョブの例です。ジョブを複数のプロセスで構成できることを、ジョブの定義でどのように説明できますか?
ティム

30

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

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

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

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

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

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

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


1
これは、シェルおよび端末プロセス管理の適切で簡潔な概要です。「ジョブ」は「パイプライン」であることに言及することで改善できます。「パイプライン」とは、プロセスグループ内で接続された複数のプロセスのことです。
クリスページ

1

コンピューティングでは、ジョブは作業単位または実行単位(前述の作業を実行する単位)です。(作業単位としての)ジョブのコンポーネントは、タスクまたはステップ(ジョブストリームのようにシーケンシャルの場合)と呼ばれます。実行の単位として、ジョブは単一のプロセスで具体的に識別され、サブプロセス(子プロセス。親プロセスであるジョブに対応するプロセス)は、タスクの作業を構成するタスクまたはステップを実行します。ジョブ; またはプロセスグループと; または、UNIXジョブ制御のように、プロセスまたはプロセスグループへの抽象参照を使用します。

ソース

いい例


-1

上記の定義は非常に技術的なものですが、運用担当者は日々の明確化を望んでいました。ジョブはスケジュールされたプロセスだと思います。一般にプロセスを扱うとき、スケジュールという概念は必ずしもありませんが、「ジョブ」という言葉を使用するときは、常にスケジュールされているか、ループのように繰り返し実行されることを意味します。


1
投票する場合は、投票について説明してください。この回答が正しくない場合、少なくともあなたがそれが正しくないと思う理由を説明してください。今まで、私の答えは理にかなっていると思います。それは私が探していた種類の説明です。
eloone

投票した人がその理由を説明していたはずだということに同意します。しかし、ダウン票の理由は、あなたの「仕事」の定義が単に間違っているからだと思います。
prograde

なぜそれが正しくないのかを説明することに注意してください。「ジョブ」は、「プロセス」が何であるかのように明確に定義されていません(システムのPIDを使用)。私の経験では、「ジョブ」は常にスケジュールされ、バックグラウンドで実行される特定の種類のプロセスを定義するために使用される単語でした。使用法で定義されているため、定義が難しいのはそのためです。プロセスのグループにすることもできますが、「コンテナ」(LXC)もそうですが、「コンテナ」は「ジョブ」ではありません。「nginx」などの起動されたプロセスも「ジョブ」ではありません。私のコメントはまだ答えにsthを追加しています。繰り返しますが、それは私が理解しようとしていたことに答えます。
eloone

私はまだ適切な定義を探しているので、すみません、答えられません(まだ)。しかし、間違っているのは、スケジュールする必要があるということです。
prograde
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.