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

Rem*_*i.b 19 parallel-processing bash

是什么的意思+,- signs that precedes 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 )
Run Code Online (Sandbox Code Playgroud)

代码2

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

[1]+  Done                    ( echo first )
[2]+  Done                    ( echo second )
[3]+  Done                    ( echo third )
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 13

所以这是我对它的理解:

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 &
Run Code Online (Sandbox Code Playgroud)

我可以从男人身上看到 bash:

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


iam*_*ser 5

%+ : current job; last job stopped in foreground or started in background
%- : last/previous job
%% : same as +
Run Code Online (Sandbox Code Playgroud)

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

$ sleep 10 
[1]+  Stopped    sleep 10

# by running kill -STOP 28105  on another terminal
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Bash 作业控制基础知识

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

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

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

[2]+  Done                    sleep 10
Run Code Online (Sandbox Code Playgroud)