私はこのようにバックグラウンドでwget
コマンドを使用します
wget -bq
そしてそれは印刷します
バックグラウンドで継続中、pid 31754。
しかし、コマンドjobs
を入力すると、ジョブが表示されません(ダウンロードは完了していません)。
wget
を-b
または--background
と一緒に使用すると、現在のシェルとの関連付けを解除することにより、itselfがバックグラウンドに配置されます( 子プロセスをフォークして親プロセスを終了することにより )。非同期ジョブとしてバックグラウンドに配置するのはシェルではないため、jobs
を使用してもジョブとして表示されません。
シェルでwget
を非同期(バックグラウンド)ジョブとして実行するには、次のコマンドを使用します。
wget ... URL &
これを行う場合、出力をいくつかのファイル(wget
が-b
で自動的に行う)にリダイレクトするか、/dev/null
にリダイレクトして破棄するか、-q
または--quiet
。
自分を背景に置いているからです。 &
を使用して、bashにバックグラウンドで配置し、bashのジョブリストに配置するように指示します。
背景とジョブ制御リストは同じではありません。 Bashはすべてのバックグラウンドプロセスをジョブコントロールリストに配置します(デフォルト)が、プロセスをリストに入れずにバックグラウンドで実行できます。リストにジョブを入れることができるのはbashだけです。
-bg
オプションには利点があるかもしれません(私にはわかりません)。たとえば、ssh
のバックグラウンドオプションは、パスワードを要求した後にバックグラウンドに配置します。
Pid 31754のプロセスが存在します。 「ps -e |grep 31754
」と入力しても、再びフォアグラウンドに移動できるジョブではないため、jobsコマンドでは表示されません。 wget -bq
は、出力を再びフォアグラウンドに移動するオプションなしで、出力をバックグラウンドに自動的に送信します。
私は通常tail wget-log
ログの最後の数行を表示して、ダウンロードのステータスを把握します。