Я должен убить задание № 3 без использования команды kill %3
. Как я могу это сделать? Кажется, я нигде не могу найти ответ. Я могу использовать только одну команду. Как мне это сделать?
5 ответов
Очень простая команда, если вы хотите уничтожить фоновое задание с помощью kill
:
kill $(jobs -p 3)
-p
перечисляет только pids, а число 3 - это задание.
Вы всегда можете fg 3
(приоритетное задание № 3) и затем отменить его с помощью Control-C или любого другого обычного метода выхода из команды.
Обзорные вопросы призваны заставить вас думать; они не очень хороши, если ответ записан явно в теле главы. Что еще ты знаешь о работе? Вы знаете его имя? Знаете ли вы, что это была самая последняя работа? Если все, что вы знаете, это то, что это задание № 3, очевидно, вы должны как-то ссылаться на него.
Есть несколько способов ссылаться на рабочие места, отличные от их количества; от man bash
:
Существует несколько способов ссылки на задание в оболочке. Символ
%
вводит имя работы. Номер заданияn
может упоминаться как%n
. Задание также может упоминаться с использованием префикса имени, использованного для его запуска, или с использованием подстроки, которая появляется в его командной строке. Например,%ce
относится к остановленной работеce
. Если префикс соответствует более чем одному заданию, bash сообщает об ошибке. Используя%?ce
, с другой стороны, относится к любому заданию, содержащему строкуce
в его командной строке. Если подстрока соответствует более чем одному заданию, bash сообщает об ошибке. Символы%%
и%+
относятся к понятию оболочки текущего задания, которое является последним заданием, остановленным, когда оно находилось на переднем плане или началось в фоновом режиме. На предыдущее задание можно ссылаться с помощью%-
. В выводе, относящемся к заданию (например, выводе команды заданий), текущее задание всегда помечается знаком+
, а предыдущее задание-
. Один%
(без сопровождающей спецификации задания) также относится к текущей работе.
Вот таблица вариантов названия работы, если ее легче читать.
Вы можете использовать функцию pkill
killall
(или)
Это обзорный вопрос в учебнике.
Довольно легко найти учебники и другие документы, в которых говорится об kill %3
. И где они это делают, совершенно очевидно, к чему этот вопрос. У него нет альтернативы команде kill
. Он не использует идентификаторы процессов вместо спецификаторов заданий оболочки. Это происходит в этом:
Чтобы завершить работающую программу в фоновом режиме, введитеkill %n
, гдеn
- номер задания, которое вы хотите прервать. Например, вводkill %3
завершает задание номер три. Некоторым программам нужно больше, чем командаkill
для завершения. Усилить силу убийства командыkill
с помощью следующего синтаксиса:kill -9 %n
- Брент Д. Хеслоп, Дэвид Энджелл (1990). Освоение SunOS. Sybex. п. 189
Это происходит из-за того, что иногда SIGTERM
не работает. Итак, при условии, что он не сработал (поскольку процесс перехватил и обработал сигнал без завершения), вам нужно попробовать отправить несколько разных сигналов. Книги также дают ответ на этот вопрос:
Хорошее общее правило - сначала попробовать сигналыTERM
,INT
илиHUP
чтобы остановить процесс. Если они терпят неудачу, то используйте сигналKILL
- Робин Андерсон, Энди Джонстон (2002). «Повседневное управление системой». Unix Unleashed. Sams Издательство. ISBN 9780672322518. с. 404.
дальнейшее чтение
- "
kill
". Введение в Unix команды. Университет Индианы. - https://unix.stackexchange.com/a/19475/5132
- https://unix.stackexchange.com/questions/8916/
- Бесполезное использование
kill -9
. Питер Н. Штейнмец.