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


8

wget像这样在后台使用命令

wget -bq

它打印

继续在后台进行,pid 31754。

但是,当我键入命令时jobs,我看不到我的工作(尽管下载尚未完成)。


2
您可以通过ps -p 31754
pLumo

Jjobs仅适用于(此)shell作业控件(即&批注,ctrl-z或bgcommamd)。一般流程清单(ps -a将显示它)
eckes

Answers:


19

使用wgetwith -b或时,--background它通过与当前shell断开关联(通过派生子进程并终止父进程)而使其自身成为后台。由于不是将Shell作为异步作业放在后台的外壳,因此当您使用时,它将不会显示为作业。jobs

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

wget ... URL &

如果这样做,您可能还需要将输出重定向到某个文件(该文件wget会自动使用-b),或通过重定向到/dev/null或使用-q或丢弃它--quiet


1
它分叉了一个孩子,父母退出了
user2497'1

@ user2497是的,请参阅更新的答案。
库萨兰达

6

因为它把自己置于后台。采用&告诉bash把它放到后台,并把它变成工作bash的列表。

背景和作业控制列表不同。Bash将其所有后台进程都放入其作业控制列表中(默认情况下),但是可以在不将其放入列表中的情况下进行后台处理。只有bash可以将作业放在其列表中。

-bg选项可能有优势(我不知道是什么)。例如ssh,背景选项,在要求输入密码后将其置于背景中。


3
-bq,即-b-q,不是-bg
Kusalananda

2

存在使用pid 31754的进程;如果您键入ps -e |grep 31754 但由于它不是可以再次移动到前台的作业,则Jobs命令不会显示该作业。wget -bq自动将输出发送到后台,而无需选择将其再次移动到前台。


ps有一个-p可用于查询特定PID的选项,或者可以使用pgrep wget
Kusalananda

0

我通常tail wget-log会查看日志的最后几行,从而使我对下载状态有所了解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.