web-dev-qa-db-ja.com

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

私はこのようにバックグラウンドでwgetコマンドを使用します

wget -bq

そしてそれは印刷します

バックグラウンドで継続中、pid 31754。

しかし、コマンドjobsを入力すると、ジョブが表示されません(ダウンロードは完了していません)。

8
floyd

wget-bまたは--backgroundと一緒に使用すると、現在のシェルとの関連付けを解除することにより、itselfがバックグラウンドに配置されます( 子プロセスをフォークして親プロセスを終了することにより )。非同期ジョブとしてバックグラウンドに配置するのはシェルではないため、jobsを使用してもジョブとして表示されません。

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

wget ... URL &

これを行う場合、出力をいくつかのファイル(wget-bで自動的に行う)にリダイレクトするか、/dev/nullにリダイレクトして破棄するか、-qまたは--quiet

19
Kusalananda

自分を背景に置いているからです。 &を使用して、bashにバックグラウンドで配置し、bashのジョブリストに配置するように指示します。

背景とジョブ制御リストは同じではありません。 Bashはすべてのバックグラウンドプロセスをジョブコントロールリストに配置します(デフォルト)が、プロセスをリストに入れずにバックグラウンドで実行できます。リストにジョブを入れることができるのはbashだけです。

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

6
ctrl-alt-delor

Pid 31754のプロセスが存在します。 「ps -e |grep 31754」と入力しても、再びフォアグラウンドに移動できるジョブではないため、jobsコマンドでは表示されません。 wget -bqは、出力を再びフォアグラウンドに移動するオプションなしで、出力をバックグラウンドに自動的に送信します。

2
Dasel

私は通常tail wget-logログの最後の数行を表示して、ダウンロードのステータスを把握します。

0
cooljay