web-dev-qa-db-ja.com

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

私はいつもバックグラウンド(デスクトップのバックグラウンドではない)プロセスについて聞いたことがあります。しかし、私は彼らが本当に何であるかを理解していません。例として、このリンクの答えを見てください デーモン、サービス、プロセスの技術的な違いは何ですか? ここに引用します:

デーモン-デーモン...backgroundで実行されるプロセスであり、インタラクティブではありません。制御端末はありません...

それらの使用法は何ですか?また、バックグラウンドで実行中のプロセスを表示する関連コマンドはありますか?

簡単な定義は、アクティブな端末またはディスプレイに接続されていないプロセスです...しかし、これを達成する方法は複数あります。

  • バックグラウンドプロセスと見なされるもののほとんどはシステムサービスです。これらは多くの場合、高レベルのinitデーモン(Upstart、Systemdなど)によって開始され、通常はそのデーモンの子のままです。ログ出力のために、initデーモンによって出力がリマインドされます。

  • 関連付けられていないプロセスとは、プロセスの親をPID = 0、/sbin/initに変更する場所です。これは、端末またはXセッションを閉じても、プロセスが(Xセッションなどの他のものに依存しない限り)残ることを意味します。 これを達成する多くの方法があります 。別の方法でリダイレクトしない限り、関連付けられたプロセスの出力は、端末が死んだ後は何も起こりません。

    関連付けの解除は必ずしもbackgroundを意味しないことに注意することが重要ですが、現在の端末が停止した場合、プロセスは自動的に「バックグラウンド」であると見なされます。 IOを管理する方法はありません。

  • 次に、バックグラウンドで実行できる仮想シェルがあり、アクティブなプロセスを開いた状態に「保持」します。 screenはおそらくこれの最良の例です。サーバー上のターミナルワークフローを保持する(またはirssi、IRCクライアントなどの出力を無期限に実行する)必要がある場合に便利な、さまざまなターミナルセッションへの切断と再接続を可能にします。 。

  • 最後に、シェルの定義があります。多くのシェル(Bashのようなコマンドラインインターフェイス)を使用すると、プロセスをバックグラウンドで実行できます。これは、単にIOファイルSTDOUT、STDIN、およびSTDERRが現在の端末から切断されることを意味します。プロセスは独自のスレッドで実行され続け、別のプロンプトが表示されます。プロセスは自動的に関連付け解除されないため、Bashセッションが終了すると、そのバックグラウンドタスクもすべて自動的に関連付け解除されます。 Bashを使用した簡単な例

8
Oli

バックグラウンドとは、デスクトップでは表示されないプロセスがシステムで実行されていることを意味します(つまり、デスクトップ上のアプリケーションを開く必要はありません)。

すべてのプロセスを表示するコマンドは「ps」と呼ばれます。 ps -efの例:

 ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 apr10 ?        00:00:02 /sbin/init
root         2     0  0 apr10 ?        00:00:00 [kthreadd]
root         3     2  0 apr10 ?        00:00:07 [ksoftirqd/0]
root         5     2  0 apr10 ?        00:00:00 [kworker/0:0H]
root         7     2  0 apr10 ?        00:00:33 [rcu_sched]
root         8     2  0 apr10 ?        00:00:00 [rcu_bh]
root         9     2  0 apr10 ?        00:00:01 [migration/0]
root        10     2  0 apr10 ?        00:00:02 [watchdog/0]
root        11     2  0 apr10 ?        00:00:02 [watchdog/1]
root        12     2  0 apr10 ?        00:00:01 [migration/1]
root        13     2  0 apr10 ?        00:00:07 [ksoftirqd/1]
root        15     2  0 apr10 ?        00:00:00 [kworker/1:0H]

ずっと長いです。たとえば、クロムを検索する場合は、次のようにps -ef | grep chromiumを実行できます。

ps -ef |grep chrom
xxxxxx    2874  1207  0 apr10 ?        00:54:28 /usr/lib/chromium-browser/chromium-browser --enable-pinch
xxxxxx    2880  2874  0 apr10 ?        00:00:04 /usr/lib/chromium-browser/chromium-browser --enable-pinch
xxxxxx    2881  2874  0 apr10 ?        00:00:00 /usr/lib/chromium-browser/chrome-sandbox /usr/lib/chromium-browser/chromium-browser --type=zygote
xxxxxx    2882  2881  0 apr10 ?        00:00:00 chromium-browser --type=zygote                          
xxxxxx    2888  2882  0 apr10 ?        00:00:00 chromium-browser --type=zygote                          

プロセスを表示する一般的なプログラムは、topおよびhtopです。

このリストを使用して、コマンドラインからプロセスを強制終了できます。

システムモニターを使用して、バックグラウンドタスクを表示できます。

enter image description here

6
Rinzwind

バックグラウンドプロセスは、ユーザーの介入なしに「舞台裏」で(つまり、バックグラウンドで)実行されるコンピュータープロセスです。これらのプロセスの一般的なタスクには、ロギング、システム監視、スケジューリング、ユーザー通知が含まれます。

コマンドラインから、演算子を使用してバックグラウンドプロセスを起動できます。 bgユーティリティは、中断されたジョブを再開し、バックグラウンドで実行できます。 fgユーティリティを使用すると、バックグラウンドプロセスがその親端末に関連付けられ、フォアグラウンドになります。 jobsユーティリティは、現在の端末に関連付けられているすべてのプロセスを一覧表示し、バックグラウンドプロセスをフォアグラウンドに移行するために使用できます。

  • 例:

    実行中のプロセス(ターミナルで実行中)をバックグラウンドに送信するには、単に Ctrl+z bgコマンドを呼び出します。

    sylvain@sylvain-ThinkPad-T430s:~$ sleep 50
    ^Z
    [1]+  Stopped                 sleep 50
    sylvain@sylvain-ThinkPad-T430s:~$ bg
    [1]+ sleep 50 &
    

    これで、sleepコマンドの実行中に端末で他のコマンドを入力できます。

ソース

2
Sylvain Pineau

バックグラウンドプロセスは、バックグラウンドで独立して実行される単なるプロセスであり、フォアグラウンドプロセスには影響しません。

詳細については、 http://cs.brown.edu/courses/bridge/1998/res/UnixGuide.html を参照してください。

1