bash 手册页说
在与作业相关的输出中(例如,jobs 命令的输出),当前作业始终用 + 标记,而前一个作业用 - 标记。单个 %(没有附带作业说明)也指当前作业。
在我下面的一系列命令中,是 2 > /dev/null &,我预期作业 [2] 是当前作业,而不是作业 [1]。
同样在命令的末尾是 3 > /dev/null &我期望作业命令输出如下:
[1] 停止
[2]- 正在运行
[3]+ 正在运行
我错过了什么?
$ yes 1 > /dev/null
^Z
[1]+ Stopped yes 1 > /dev/null
$ jobs
[1]+ Stopped yes 1 > /dev/null
$ yes 2 > /dev/null &
[2] 3082
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2]- Running yes 2 > /dev/null &
$ yes 3 > /dev/null &
[3] 3116
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2] Running yes 2 > /dev/null &
[3]- Running yes 3 > /dev/null &
答案1
来自同一手册页:
[…] 当前作业,即最后一个在前台停止或在后台启动的作业。
这句话有些含糊,你可以理解为:
- 将所有“在前台运行或在后台启动的作业停止”...
- ...然后选择“最后一个”。
但这是相当:
- 以“最后一项作业在前台时停止”为例;
- 但如果没有这样的工作,则采取“在后台启动的最后一项工作”。