コンテキスト
同じトピックについて複数の質問を確認しましたが、バックグラウンドプロセスが正確に何であるかを説明すると、まだ混乱しています。私が説明する一般的な答えは次のとおりです。
バックグラウンドで実行されるプロセスは、同じ端末などと対話することができます。
次のコマンドを実行してこれをテストしました。
ping google.com -c 100 &
- PS:演算子なしで同じコマンドを実行して
&
Ctrl-Zを使用しましたが、実行された作業はコマンドを一時停止することでした。
質問
このコマンドを実行すると、出力はデフォルトの端末にあるため、コマンドの実行が完了または終了するまで他のコマンドを実行することはできません。
私の質問をリストする前に、私の質問はコマンド出力を別々のファイル/場所にリダイレクトする方法ではありません。。ping google.com -c 100
既定の端末と引き続き対話できるように、コマンド出力を別の場所にリダイレクトする方法をすでに知っています。
私の質問は
- 最も簡単な言葉で言えば、バックグラウンドコマンドが実際に実行することは何ですか?
&
コマンドの最後にaを追加するにはどうすればよいですか?- これの目的は何ですか/バックグラウンドコマンドから何を得ることができますか?
- いつバックグラウンドにコマンドを入れたいですか?
**質問や背景についてさらに説明が必要な場合は、お知らせください。
答え1
インタラクティブシェルの文脈で、次の質問に答えてください。シェルスクリプトの文脈では、これらの動作はわずかに異なりますが、ほぼ同様です。
- 最も簡単な言葉で言えば、バックグラウンドコマンドが実際に実行することは何ですか?
バックグラウンドコマンド(または他のプロセス)を使用すると、シェルと対話(実行など)しながら同時に実行できます。新しいプロセス)。
- コマンドの最後に&を追加することは何をしますか?
区切り文字は&
与えられたコマンドの終わりを示し、そのコマンドによって呼び出されたプロセスをすぐに実行してバックグラウンドに移動します。同様に;
、区切り文字は、コマンドが終了し、新しいシェルプロンプトが表示されるまで実行されるそのコマンドの終わりを示します。
- これの目的は何ですか/バックグラウンドコマンドから何を得ることができますか?
- いつバックグラウンドにコマンドを入れたいですか?
これらは本質的に同じ問題です。短い答えは次のとおりです。実行に長い時間がかかるコマンドを実行したいのですが、実行中に他のタスクを続行できる場合です。たとえば、人為的な例は次のとおりです。
$ tail -f /path/to/apache-log > ~/webserverlog.txt &
$ curl --silent -o /dev/null https://localhost/path/site/you/are/debugging
$ kill %1