バックグラウンドプロセスの一般的な定義は次のとおりです。
“バックグラウンドプロセスは、ユーザー入力なしで実行されているプログラムです。Aユーザーがフォアグラウンドプロセスと対話している間、多数のバックグラウンドプロセスをLinuxなどのマルチタスクオペレーティングシステムで実行できます。たとえば、デーモンなどの一部のバックグラウンドプロセスは、ユーザー入力を必要としません。他のプロセスは、一時的にバックグラウンドにあるだけです。ユーザーは現在フォアグラウンドで実行されているプログラムで忙しいので、他のプロセスがアクティブになるまでスリープしてスワップスペースを占有できるようにします。これにより、現在はバックグラウンドプロセスになります。」
その定義を考えると、 apache2のようなプロセスは、ターミナルでのユーザー入力と相互作用しないため、バックグラウンドプロセスになりませんか?また、システムで実行されているほとんどのプロセスはターミナルでのユーザー入力を処理しないため、ほとんどのプロセスバックグラウンドプロセスを考慮しませんか?奇妙なことに、私は個人的にapache2をバックグラウンドプロセスとは見なしません。ユーザーはhttpリクエスト(端末ではなく)を介してapache2を操作するからです。
コメント
- ここには2つの定義があると思います。1つはユーザー入力に関するものです(プロセスが端末などのユーザー入力を受け入れることができるかどうか)。もう1つは、プロセスがスリープしてスワップスペースに座っているかどうかです。これらの両方をバックグラウンドプロセスと呼びます。これにより、用語が混乱します
回答
フォアグラウンドプロセスはそうではありませんユーザーの操作が必要です。
cp very_large_file destination
を実行すると、コピーが完了するまで端末がブロックされ、ユーザーの操作がないフォアグラウンドプロセスと見なされます。要点これは、プロセスが終了するまで他のプロセスの実行をブロックするかどうかです。
2つの方法があります。フォアグラウンドプロセスを作成するバックグラウンドに:
1-コマンドラインの最後にアンパサンド( & )を追加します:
cp very_large_file destination &
2-フォアグラウンドプロセスを停止してからバックグラウンドに戻す:
cp very_large_file destination
CTRL + Z
bg
これで、apache2
は間違いなく次のようにカウントされます。バックグラウンドプロセス:はい、httpリクエストを介して対話できますが、ポート80(デフォルト)でそのようなリクエストを待機するだけです。ユーザーがリクエストを行うまでシステムをブロックしません。
また、バックグラウンドプロセスと見なされているほとんどのプロセスで問題が発生するのはなぜですか?これは「マルチタスクオペレーティングシステム」では確かに正常です。
コメント
- ブロックするプログラムがある場合、好奇心からですがそれはGNUscreenセッションまたはtmuxで実行されており、そのscreen / tmuxセッションを離れて、制御をターミナルに戻します(ただし、もちろん、HUP(ハングアップ)信号を無視するため、実行されたままです)、バックグラウンドと見なされますか?処理する?メインターミナルではブロックされていなくても、セッション内ではブロックされているため、フォアグラウンドプロセスであると主張するでしょう。
- @JohnMerlino
screen
/tmux
はこの場合のフォアグラウンドプロセスであり、"制御を端末に戻すと"バックグラウンドに送信します。
回答
には2つの一般的な定義があります。 「バックグラウンドプロセス」、一般的には1つ、UNIXに固有の正確なプロセス。
広義には、「バックグラウンドプロセス」とは、に座っているユーザーと対話していないプロセスと呼ぶことができます。コンソール。この意味で、Apacheはバックグラウンドプロセスです。
UNIXの用語では、「バックグラウンドプロセス」には正確な定義があります。バックグラウンドプロセスは端末から開始されるプロセスですが、現在はterとの対話が禁止されていますミネラル。 (私はプロセスグループを考慮しないことで単純化しています。)通常、シェルでバックグラウンドジョブを開始するか、または開始することでバックグラウンドプロセスを取得します。
$ myprogram & [1] 12345 $
プログラムを一時停止し、バックグラウンドで続行します:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
&
なしでプログラムを開始した場合、それは前景にあります。特定の端末のフォアグラウンドには一度に1つのプロセスしか存在できません。 (または、より一般的には、フォアグラウンドプロセスがいくつかのサブプロセスを開始する場合は、単一のプロセスグループです。)シェルビルトインbg
およびfg
はどのプロセスを変更しますフォアグラウンドにあります。プロセスがバックグラウンドにあるときに、端末に対して読み取りまたは書き込みを行おうとすると、 SIGTTINまたはSIGTTOUTシグナルによって停止されます。
ApacheはHTTPを介してユーザーと対話しているため、バックグラウンドプロセスではないという直感があります。 Apacheはユーザーと対話していません。リモートWebブラウザー(ユーザーと対話している)または自動クライアント(ユーザーと対話していない)と対話しています。 インタラクティブと相互作用するプロセスをインタラクティブプロセスと見なす場合、プロセスはインタラクティブであるため、役に立たない概念になります。
引用する定義は、バックグラウンドプロセスをアイドル状態のプロセスと統合します。 ■バックグラウンドプロセスがフォアグラウンドプロセスよりもスリープまたはスワップアウトされる理由はありません。 たとえば、バックグラウンドプロセスが重い計算を行っている可能性があります。 逆に、ユーザーがコンソールから離れ、他のアクティブなプロセスがある場合、フォアグラウンドプロセスがスワップアウトされる可能性があります。