Intereting Posts
Удалить родительскую папку, сохраняющую все содержимое Обобщающий файл задания qsub для Grid Engine для нескольких программ и имен входных файлов bash: перенаправление ввода-вывода, но не с суффиксами как перенести все файлы из канала в каталог? Объедините 2 файла в одном с настраиваемой линией между Почему обратная косая черта преобразуется в пространство в выражении эха, если IFS = '\'? Как упаковать программу python ifplugd (lo): сбой выполнения программы, возвращаемое значение равно 1 Как повторить команду, когда в файле есть определенная строка? Рекурсивная очистка всех папок и подпапок в папке, в которой нет файлов Проблема фильтрации массива последовательностей для удаления дубликатов со сдвинутыми последовательностями Обновление ядра на устройстве ARM Как отсортировать строки, содержащие «_» численно? Принимает ли отношение RELATED, ESTABLISHED для всех источников в iptables считается «слишком открытым»? Как выбрать строку с последней датой и временем

Убить все фоновые задания

Есть ли более компактная форма убийства фоновых заданий, чем:

for i in {1..5}; do kill %$i; done 

Кроме того, {1..5}, очевидно, имеет закодированное магическое число в нем, как я могу сделать его «N», когда N является правильным числом, не делая:

 $(jobs | wc -l) 

Я действительно использую \ j в PS1, чтобы получить # управляемых заданий, это эквивалент?

Чтобы просто kill все фоновые задания, управляемые bash , сделайте

 kill $(jobs -p) 

Обратите внимание: поскольку оба jobs и kill встроены в bash , вы не должны запускать какие-либо ошибки в слишком длинном типе списка аргументов .

Используйте xargs вместо подкоманды $(jobs -p) , потому что если jobs -p пустые, команда kill будет терпеть неудачу.

 jobs -p | xargs kill 

Я предпочитаю проверять, есть ли какие-либо задания, которые существуют до их убийства – таким образом, сценарий не будет терпеть неудачу, если ничего не работает.

Он также короче. Бросьте это в свой .bash_profile :

 function killjobs () { JOBS="$(jobs -p)"; if [ -n "${JOBS}" ]; then; kill -KILL ${JOBS}; fi } 

Затем выполните:

 killjobs 

Чтобы убить все выполняемые задания.