Я должен убить задание № 3 без использования команды kill %3 . Как я могу это сделать? Кажется, я нигде не могу найти ответ. Я могу использовать только одну команду. Как мне это сделать?

5 ответов5

2

Очень простая команда, если вы хотите уничтожить фоновое задание с помощью kill :

kill $(jobs -p 3)

-p перечисляет только pids, а число 3 - это задание.

1

Вы всегда можете fg 3 (приоритетное задание № 3) и затем отменить его с помощью Control-C или любого другого обычного метода выхода из команды.

1

Обзорные вопросы призваны заставить вас думать; они не очень хороши, если ответ записан явно в теле главы. Что еще ты знаешь о работе? Вы знаете его имя? Знаете ли вы, что это была самая последняя работа? Если все, что вы знаете, это то, что это задание № 3, очевидно, вы должны как-то ссылаться на него.

Есть несколько способов ссылаться на рабочие места, отличные от их количества; от man bash:

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

Вот таблица вариантов названия работы, если ее легче читать.

0

Вы можете использовать функцию pkill killall (или)

0

Это обзорный вопрос в учебнике.

Довольно легко найти учебники и другие документы, в которых говорится об 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.

дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .