为什么我在后台执行“wget”作业时看不到它?

为什么我在后台执行“wget”作业时看不到它?

wget在后台使用命令是这样的

wget -bq

它打印

继续在后台运行,pid 31754。

但是当我输入命令时jobs,我没有看到我的作业(尽管下载尚未完成)。

答案1

wget当与-bor--background一起使用时本身通过与当前 shell 解除关联进入后台(通过分叉子进程并终止父进程)。由于不是 shell 将其作为异步作业置于后台,因此当您使用 时,它不会显示为作业jobs

wget在 shell 中作为异步(后台)作业运行,请使用

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查看日志的最后几行,从而了解下载的状态。

相关内容