В чем смысл знаков `+`, `-` и` `, предшествующих` Done`, когда заканчивается фоновый процесс?

Вопрос

В чем смысл знаков +, - и , предшествующих 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 )

Ответ 1

Итак, вот мое понимание:

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:

Существует несколько способов обращения к заданию в оболочке. Символ% вводит спецификацию задания (jobspec). работа число n может быть        называемый% n. Задание также может ссылаться на использование префикса имени, используемого для его запуска, или с помощью подстроки, которая появляется в своей команде        линия. Например,% ce относится к остановленному заданию ce. Если префикс соответствует нескольким заданиям, bash сообщает об ошибке. Используя%? Ce, с другой        hand, ссылается на любое задание, содержащее строку ce в командной строке. Если подстрока соответствует нескольким заданиям, bash сообщает ошибка.        символы %% и% + относятся к представлению оболочки о текущем задании, которое является последним заданием, остановленным, когда оно было на переднем плане или началось в        задний план. На предыдущую работу можно ссылаться, используя% -. Если есть только одно задание,% + и% - оба могут использоваться для ссылки на это работа. В        выход, относящийся к заданиям (например, вывод команды заданий), текущее задание всегда помечено знаком +, а предыдущее работа с.        single% (без сопроводительной спецификации задания) также относится к текущему заданию.

Ответ 2

%+ : 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 Основы управления заданиями.

Номер задания n можно назвать "% n. Символы" %% "и" % + "относятся к представлению оболочки о текущем задании, которое является последним заданием, остановленным, когда оно было на переднем плане или запущено в фоновом режиме. Один" % (без сопроводительной спецификации задания) также относится к текущему заданию. На предыдущую работу можно ссылаться, используя "% -. Если есть только одно задание," % + "и" % "могут использоваться для ссылки на это задание. В выводе, относящемся к заданиям (например, вывод команды jobs), текущее задание всегда помечено знаком" + ", а предыдущее задание -" -.

При выполнении нескольких заданий в фоновом режиме bash показывает вам задание, когда его статус был изменен и когда он попадает в другой prompt. Чтобы сразу увидеть работу, когда задание изменит статус/завершено, можно использовать set builtin.

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

[2]+  Done                    sleep 10