当后台进程结束时,在`Done`之前的`+`,`-`和``符号是什么意思?

时间:2018-02-17 03:30:59

标签: bash parallel-processing

问题

后台流程结束时+之前的-Done符号有什么含义?

感兴趣的例子

代码1

(sleep 4s; echo first)&
(sleep 2s; echo second)&
(sleep 1s; echo third)&

[1]   Done                    ( sleep 4s; echo first )
[2]-  Done                    ( sleep 2s; echo second )
[3]+  Done                    ( sleep 1s; echo third )

代码2

(echo first)&
(echo second)&
(echo third)&

[1]+  Done                    ( echo first )
[2]+  Done                    ( echo second )
[3]+  Done                    ( echo third )

2 个答案:

答案 0 :(得分:12)

所以这是我对它的理解:

1-已标记作业或+作业是最后发送到后台的作业。

2-工作已标记或已将-发送到后台的后台。

3-其他后台作业未被标记。

以下是我刚在系统上运行的示例:

$bash: /singh/test1 &
[1] 9223
$bash:  /singh/test2 &
[2] 9226
$bash:  /singh/test3 &
[3] 9234
$bash:  /singh/test4 &
[4] 9237
$bash:  jobs
[1]   Running                 /singh/test &
[2]   Running                 /singh/test2 &
[3]-  Running                 /singh/test3 &
[4]+  Running                 /singh/test4 &

我可以从男人身上看到 bash

  

有很多方法可以引用shell中的作业。字符%引入了作业规范(jobspec)。工作   数字n可能是          称为%n。也可以使用用于启动它的名称的前缀或使用出现的子字符串来引用作业   在它的命令          线。例如,%ce指的是停止的作业。如果前缀匹配多个作业,则bash报告错误。使用%?ce,   在另一          hand,指在命令行中包含字符串ce的任何作业。如果子字符串匹配多个作业,bash会报告一个   错误。该          符号%%和%+指的是当前作业的shell概念,这是在前台作业时停止的最后一个作业或者   开始了          背景。可以使用% - 引用上一个作业。如果只有一个作业,%+和% - 都可以用来引用   那份工作。在          与作业相关的输出(例如,作业命令的输出),当前作业总是标记为+,以及之前的作业   工作与 - 。一个          单个%(没有伴随作业规范)也指当前作业。

答案 1 :(得分:4)

%+ : current job; last job stopped in foreground or started in background
%- : last/previous job
%% : same as +

%+不仅会显示后台作业中的状态更改,还会显示前台作业,例如已暂停kill -STOP <pid>的作业。

$ sleep 10 
[1]+  Stopped    sleep 10

# by running kill -STOP 28105  on another terminal

有关详细信息,请参阅Bash Job Control Basics

  

作业编号n可以称为'%n'。符号'%%'和'%+'指的是当前作业的shell概念,它是在前台或在后台启动时停止的最后一个作业。单个'%'(没有伴随作业规范)也指当前作业。可以使用'% - '引用上一个作业。如果只有一个作业,'%+'和'% - '都可以用来指代那个作业。在与作业相关的输出中(例如,作业命令的输出),当前作业总是标记为“+”,而前一个作业标记为“ - ”。

在后台运行多个作业时,bash会向您显示作业,状态何时更改以及何时达到另一个prompt。要在作业更改其状态/终止时立即查看作业,可以使用set内置。

$ set -b
$ sleep 10 &
[1] 27866
$ sleep 10 &
[2] 27868
$  [1]-  Done                    sleep 10

[2]+  Done                    sleep 10