Как исправить (короткая версия)
У вас есть несколько способов сделать это:
С %-
вы попросите отказаться от последней фоновой работы.
xterm &> /dev/null & disown %-
С $!
вместо этого вы попросите отказаться от последнего выполненного задания (через его PID).
xterm &> /dev/null & disown $!
Так что потребуется написать еще пару символов, но, по крайней мере, вы можете выбрать, какие из них :-)
Причины
Причина в следующем: когда вы выполняете задание, отправляя его в фоновый режим с помощью &
, по сути, оно не меняет текущее задание, а только предыдущее. Текущая работа остается той, что была раньше.
Еще несколько слов и пример
Вы можете проверить сказанное выше с помощью команды jobs
, сравнив ее результаты до и после запуска задания в фоновом режиме.
Раньше: предположим, у вас есть несколько фоновых процессов, запущенных только из терминала (например, запущенных с помощью dolphin &
и kate &
).
Теперь вы запускаете vim
и приостанавливаете его с помощью Ctrl-Z.
Выход jobs
будет:
[1] Running dolphin . &
[2]- Running kate &
[3]+ Stopped vim
vim
- текущее задание, помеченное +
, а kate
- предыдущее, помеченное -
.
Действительно, в справочном руководстве bash глава 7.1 [ 1 ] объясняет, что
«В выводе, относящемся к заданию (например, выводе команды заданий), текущее задание всегда помечается знаком« + », а предыдущее задание -« - ».»
После: Наконец, вы пишете команду xterm &> /dev/null &
(без disown
).
Отвечая на jobs
, на этот раз он ответит:
[1] Running dolphin .
[2] Running kate
[3]+ Stopped vim
[4]- Running xterm &> /dev/null &
Обратите внимание, что vim
по-прежнему помечен +
а xterm
- -
.
Последняя фоновая работа, помеченная знаком -
это xterm
а не больше kate &
.
Другими словами, система действует так, как будто
- Сначала он запускает
xterm
: новая команда (xterm
) становится текущей и vim
предыдущей.
- Затем
xterm
отправляется в фоновом режиме, и элемент управления возвращается к предыдущему в списке (vim
с его статусом), который снова становится текущим и снова помечается знаком +
. Вместо этого xterm
- это новое предыдущее задание, и оно помечено знаком -
.
- В конце вы найдете обновленную только предыдущую работу (-), а не текущую (+).
Так как вы можете позвонить в « disown
» с указанием номера работы или PID, у вас есть два варианта
%-
: на предыдущее задание можно ссылаться с помощью %-
, возможно, его будет легче запомнить, если вы считаете, что также в заданиях помечено знаком -
$!
: PID последнего задания, которое выполняется в фоновом режиме, находится в специальном параметре $!
[ 2 ].
Команда disown
примет оба.
Рекомендации