Linux: убить фоновое задание
Как убить последнюю порожденную фоновую задачу в Linux?
Пример:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
8 ответов
Для этого в 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, которая позволяет вам выбрать один или несколько процессов на основе заданных критериев.
Это неуместный ответ, но для тех, кто заинтересован, он может быть ценным.
Как и в ответе @John Kugelman, % относится к спецификации работы. как эффективно это найти? используйте команду less и &pattern, кажется, что man использует меньше пейджер (не уверен), в man bash введите &%, затем введите Enter, чтобы отобразить только строки, содержащие '%', для повторного показа всего введите &. затем введите.
Просто используйте команду killall:
killall имя задачи
для получения дополнительной информации и дополнительных параметров введите "man killall".