Linux: убить фоновое задание - PullRequest
178 голосов
/ 26 октября 2009

Как убить последнюю порожденную фоновую задачу в linux?

Пример:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????

Ответы [ 8 ]

274 голосов
/ 26 октября 2009

Вы можете убить по номеру задания. Когда вы поставите задачу в фоновом режиме, вы увидите что-то вроде:

$ ./script &
[1] 35341

То, что [1] является номером задания и на него можно ссылаться как:

$ kill %1
$ kill %%  # Most recent background job

Чтобы просмотреть список номеров работ, используйте команду jobs. Больше от man bash:

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

213 голосов
/ 26 октября 2009

Для этого в bash есть специальная переменная:

kill $!

$! расширяется до PID последнего процесса, выполненного в фоновом режиме.

42 голосов
/ 26 октября 2009

Следующая команда дает вам список всех фоновых процессов в вашем сеансе вместе с pid.Затем вы можете использовать его, чтобы убить процесс.

jobs -l

Пример использования:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139
22 голосов
/ 05 января 2014

Это должно убить все фоновые процессы:

jobs -p | xargs kill -9
2 голосов
/ 26 октября 2009
skill doB

skill - это версия команды kill, которая позволяет выбрать один или несколько процессов на основе заданных критериев.

1 голос
/ 26 октября 2009

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

0 голосов
/ 10 июня 2016

это ответ не по теме, но для тех, кому это интересно, он может быть ценным.

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

0 голосов
/ 26 октября 2009

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

killall имя задачи

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

...