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


8

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

wget -bq

そしてそれは印刷します

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

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


2
あなたはそれを見ることができますps -p 31754
pLumo

Jjobs(this)シェルジョブコントロール(つまり、&注釈、ctrl-zまたはbgcommamd)に対してのみ機能します。一般的なプロセスのリスト(ps -a表示されます)
eckes '11年

回答:


19

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

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

wget ... URL &

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


1
それは子供をフォークし、親は終了します
user2497

@ user2497はい、更新された回答を参照してください。
クサラナンダ

6

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

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

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


3
それは-bq、つまり-b、そして-qではありません-bg
クサラナンダ

2

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


ps持っている-p特定のPIDを照会するために使用することができますオプションを、または1つを使用することができますpgrep wget
クサラナンダ

0

私は通常tail wget-log、ログの最後の数行を表示するために使用するため、ダウンロードのステータスがわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.