私はいつもバックグラウンド(デスクトップのバックグラウンドではない)プロセスについて聞いたことがあります。しかし、私は彼らが本当に何であるかを理解していません。例として、このリンクの答えを見てください デーモン、サービス、プロセスの技術的な違いは何ですか? ここに引用します:
デーモン-デーモン...backgroundで実行されるプロセスであり、インタラクティブではありません。制御端末はありません...
それらの使用法は何ですか?また、バックグラウンドで実行中のプロセスを表示する関連コマンドはありますか?
簡単な定義は、アクティブな端末またはディスプレイに接続されていないプロセスです...しかし、これを達成する方法は複数あります。
バックグラウンドプロセスと見なされるもののほとんどはシステムサービスです。これらは多くの場合、高レベルのinitデーモン(Upstart、Systemdなど)によって開始され、通常はそのデーモンの子のままです。ログ出力のために、initデーモンによって出力がリマインドされます。
関連付けられていないプロセスとは、プロセスの親をPID = 0、/sbin/init
に変更する場所です。これは、端末またはXセッションを閉じても、プロセスが(Xセッションなどの他のものに依存しない限り)残ることを意味します。 これを達成する多くの方法があります 。別の方法でリダイレクトしない限り、関連付けられたプロセスの出力は、端末が死んだ後は何も起こりません。
関連付けの解除は必ずしもbackgroundを意味しないことに注意することが重要ですが、現在の端末が停止した場合、プロセスは自動的に「バックグラウンド」であると見なされます。 IOを管理する方法はありません。
次に、バックグラウンドで実行できる仮想シェルがあり、アクティブなプロセスを開いた状態に「保持」します。 screen
はおそらくこれの最良の例です。サーバー上のターミナルワークフローを保持する(またはirssi
、IRCクライアントなどの出力を無期限に実行する)必要がある場合に便利な、さまざまなターミナルセッションへの切断と再接続を可能にします。 。
最後に、シェルの定義があります。多くのシェル(Bashのようなコマンドラインインターフェイス)を使用すると、プロセスをバックグラウンドで実行できます。これは、単にIOファイルSTDOUT、STDIN、およびSTDERRが現在の端末から切断されることを意味します。プロセスは独自のスレッドで実行され続け、別のプロンプトが表示されます。プロセスは自動的に関連付け解除されないため、Bashセッションが終了すると、そのバックグラウンドタスクもすべて自動的に関連付け解除されます。 Bashを使用した簡単な例 。
バックグラウンドとは、デスクトップでは表示されないプロセスがシステムで実行されていることを意味します(つまり、デスクトップ上のアプリケーションを開く必要はありません)。
すべてのプロセスを表示するコマンドは「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
です。
このリストを使用して、コマンドラインからプロセスを強制終了できます。
システムモニターを使用して、バックグラウンドタスクを表示できます。
バックグラウンドプロセスは、ユーザーの介入なしに「舞台裏」で(つまり、バックグラウンドで)実行されるコンピュータープロセスです。これらのプロセスの一般的なタスクには、ロギング、システム監視、スケジューリング、ユーザー通知が含まれます。
コマンドラインから、&演算子を使用してバックグラウンドプロセスを起動できます。 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
コマンドの実行中に端末で他のコマンドを入力できます。
バックグラウンドプロセスは、バックグラウンドで独立して実行される単なるプロセスであり、フォアグラウンドプロセスには影響しません。
詳細については、 http://cs.brown.edu/courses/bridge/1998/res/UnixGuide.html を参照してください。