职位编号旁边的“+”和“-”符号

职位编号旁边的“+”和“-”符号

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

来自同一手册页:

[…] 当前作业,即最后一个在前台停止或在后台启动的作业。

这句话有些含糊,你可以理解为:

  1. 将所有“在前台运行或在后台启动的作业停止”...
  2. ...然后选择“最后一个”。

但这是相当

  1. 以“最后一项作业在前台时停止”为例;
  2. 但如果没有这样的工作,则采取“在后台启动的最后一项工作”。

相关内容