バックグラウンドプロセスとは何ですか?

バックグラウンドプロセスとは何ですか?

以下は、バックグラウンドプロセスの一般的な定義です。

「バックグラウンドプロセスは、ユーザー入力なしで実行されるプログラムです。ユーザーがフォアグラウンドプロセスと対話すると、マルチタスクオペレーティングシステム(Linuxなど)で複数のバックグラウンドプロセスが実行される可能性があります。同じ目的で使用されます。ユーザーの入力はまったく必要ありません。ユーザーが現在のフォアグラウンドで実行されているプログラムで、他のプロセスは一時的にバックグラウンドにあるので、他のプロセスはアクティブになるまでスリープしてスワップスペースを占めています。で作成します。

この定義が与えられた場合、apache2のようなプロセスは端末のユーザー入力と対話しないので、バックグラウンドプロセスにはなりませんか?システムで実行されているほとんどのプロセスは端末でユーザー入力を処理しないため、ほとんどのプロセスバックグラウンドプロセスを考慮しませんか?奇妙なことに、私は個人的にapache2をバックグラウンドプロセスとして考えていません。これは、ユーザーがhttpリクエスト(ただの端末ではない)を介してapache2と対話するためです。

ベストアンサー1

「デーモン」には、一般的な定義と正確なUNIX固有の定義という2つの一般的な定義があります。

広く言うと、コンソールに座っているユーザーと対話しないすべてのプロセスを「バックグラウンドプロセス」と呼ぶことができます。この意味で、Apacheはバックグラウンドプロセスです。

Unixの用語では、「バックグラウンドプロセス」は正確な定義を持っています。 ㅏバックステージコース端末で開始されたが現在端末との対話が禁止されているプロセスです。 (プロセスグループを考慮しないことで単純化しています。)通常、シェルでバックグラウンドジョブを開始してバックグラウンドプロセスを取得します。

$ myprogram &
[1] 12345
$ 

または、プログラムを起動して一時停止し、バックグラウンドで実行を続けます。

$ myprogram
^Z
[1]+ Stopped    myprogram
$ bg
[1]+ myprogram &
$ 

なしのプログラムを起動すると、&フォアグラウンドで実行されます。フォアグラウンドには1つのプロセスしかありません。特定の端末で一度。 (またはより一般的には、フォアグラウンドプロセスが一部のサブプロセスを開始する場合は単一のプロセスグループです。)シェル組み込みコマンドは、フォアグラウンドのプロセスをbg変更fgします。プロセスがバックグラウンドにあるときに端末に読み書きする場合SIGTTINまたはSIGTTOUT信号で停止

ApacheはHTTPを介してユーザーと対話するため、バックグラウンドプロセスではないという直感を発見しました。 Apacheはユーザーと対話しません。つまり、リモートWebブラウザ(ユーザーと対話)または自動化クライアント(ユーザーと対話しない)と対話します。対話型プロセスと対話するすべてのプロセスを対話型プロセスと見なすと、すべてのプロセスは対話型であるため、役に立たない概念になります。

引用した定義は、バックグラウンドプロセスをアイドルプロセスと統合します。バックグラウンドプロセスがフォアグラウンドプロセスよりも多くの時間をスリープモードに切り替えたり交換したりする理由はありません。たとえば、バックグラウンドプロセスはいくつかの重い計算を実行できます。逆に、ユーザーがコンソールを離れて他のアクティブプロセスがある場合は、フォアグラウンドプロセスを置き換えることができます。

おすすめ記事