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, которая позволяет вам выбрать один или несколько процессов на основе заданных критериев.

Вам нужен его pid... используйте "ps -A", чтобы найти его.

Это неуместный ответ, но для тех, кто заинтересован, он может быть ценным.

Как и в ответе @John Kugelman, % относится к спецификации работы. как эффективно это найти? используйте команду less и &pattern, кажется, что man использует меньше пейджер (не уверен), в man bash введите &%, затем введите Enter, чтобы отобразить только строки, содержащие '%', для повторного показа всего введите &. затем введите.

Просто используйте команду killall:

killall имя задачи

для получения дополнительной информации и дополнительных параметров введите "man killall".

Другие вопросы по тегам