Как убить последнюю заданную фоновое задание в Linux?
Пример:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Как убить последнюю заданную фоновое задание в Linux?
Пример:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
В bash есть специальная переменная:
kill $!
$! расширяется до PID последнего процесса, выполняемого в фоновом режиме.
Вы можете убить по номеру задания. Когда вы ставите задачу в фоновом режиме, вы увидите что-то вроде:
$ ./script &
[1] 35341
Это [1]
- это номер задания, на который можно ссылаться как:
$ kill %1
$ kill %% # Most recent background job
Чтобы просмотреть список номеров заданий, используйте команду jobs
. Больше от man bash
:
Существует несколько способов обращения к заданию в оболочке. Символ
%
вводит имя задания. Номер заданияn
может быть называемый%n
. Задание также может ссылаться на использование префикса имени, используемого для его запуска, или с помощью подстроки, которая появляется в командной строке. Например,%ce
относится к остановленному заданиюce
. Если префикс соответствует нескольким заданиям, bash сообщает об ошибке. С другой стороны, использование%?ce
относится к любому заданию, содержащему строкуce
в командной строке. Если подстрока соответствует нескольким заданиям, bash сообщает об ошибке. Символы%%
и%+
относятся к представлению оболочки текущего задания, которое является последним заданием, которое было остановлено, когда оно было на переднем плане или запущено в фоновом режиме. Предыдущая работа может с помощью%-
. На выходе, относящемся к заданиям (например, вывод команды заданий), текущее задание всегда помечено знаком+
и предыдущим заданием с-
. Один%
(без сопроводительной спецификации задания) также относится к текущее задание.
Следующая команда дает вам список всех фоновых процессов в вашем сеансе вместе с pid. Затем вы можете использовать его, чтобы убить процесс.
jobs -l
Пример использования:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
Это должно уничтожить все фоновые процессы:
jobs -p | xargs kill -9
skill doB
skill
- это версия команды kill, которая позволяет выбрать один или несколько процессов на основе заданных критериев.
Вам нужен pid... используйте "ps -A", чтобы найти его.
Это не ответ на вопрос, но для тех, кто заинтересован, это может быть ценно.
Как и в ответе @John Kugelman,% связано с заданием. как эффективно найти это? использовать менее & команда шаблона, кажется, что человек использует меньше пейджера (не так уж точно), в man bash type &% then type Enter будет отображать только строки, содержащие "%", чтобы просмотреть все, введите &;. затем введите.
Просто используйте команду killall:
killall taskname
для получения дополнительных сведений и более расширенных параметров, введите "man killall".