バックグラウンドで「wget」ジョブを実行すると、なぜ表示できないのですか?

バックグラウンドで「wget」ジョブを実行すると、なぜ表示できないのですか?

私がwgetバックグラウンドで使用するコマンドは次のとおりです。

wget -bq

それは印刷する

バックグラウンドで引き続き実行します(PID 31754)。

ただし、コマンドを入力すると、jobs私のタスクは表示されません(ダウンロードはまだ完了していませんが)。

答え1

wget-bまたは一緒に--background使用する場合それ自体現在のシェルから切断して背景に入ります(子プロセスをフォークして親プロセスを終了することで)。バックグラウンドに非同期ジョブとして入れるシェルではないため、使用時にジョブとして表示されませんjobs

wgetシェルで非同期(バックグラウンド)ジョブとして実行するには、以下を使用します。

wget ... URL &

これにより、出力をファイルにリダイレクトするか(使用するとwget自動的にこの操作が行われます)-bにリダイレクトするか、またはを/dev/null使用して-q削除できます--quiet

答え2

それ自体が背景に置かれているからです。&bashにこれをバックグラウンドにして、bashのタスクリストに入れるように指示するために使用されます。

背景とジョブ制御のリストが異なります。 Bashはすべてのバックグラウンドプロセスをジョブ制御リスト(デフォルト)に配置します。ただし、プロセスはリストに入れることなくバックグラウンドで処理できます。 bashだけがリストにアクションを入れることができます。

このオプションには利点があるかもしれません-bg(何がわかりません)。たとえばssh、バックグラウンドに配置する前にパスワードが必要なバックグラウンドオプションがあります。

答え3

pidが31754のプロセスが存在します。入力すると、ps -e |grep 31754 フォアグラウンドに戻ることができる操作ではないため、jobsコマンドはそれを表示しません。wget -bq再び前景に移動することを選択しなくても、自動的に出力を背景に送信します。

答え4

私は通常、tail wget-logダウンロードの状況を把握するためにログの最後の数行を表示します。

関連情報