В этой статье мы рассмотрим разницу между командами kill и killall.

Убийство” процессов в Linux – это важная вещь, которую должны знать администраторы и пользователи.

В какой-то момент вы столкнетесь с приложением или службами, которые зависают и зависают, и вам нужно будет убить процесс, чтобы выйти из него.

Командная строка Linux предлагает несколько различных способов уничтожения процессов.

Иметь несколько инструментов для этой работы, как это принято в Linux, удобно, но создает некоторую путаницу, поскольку все они немного дублируют друг друга.

В этом учебнике мы объясним разницу между командами kill и killall в Linux.

Вы также увидите примеры использования каждой команды.

kill и killall – в чем разница?

Как видно из названий, kill завершает процесс, а killall может завершить несколько процессов одновременно.

Самый лучший способ понять разницу – рассмотреть несколько примеров:

Чтобы убить процесс в Linux, используйте команду kill и укажите идентификатор процесса, который вы планируете завершить.

$ kill 1234

Команда killall работает немного иначе, принимая имя процесса, который нужно завершить, и убивая все процессы, соответствующие указанному вами имени.

$ killall firefox

В этом примере все процессы с именем “firefox” будут завершены.

Неважно, открыто ли у вас только 1 окно Firefox или 50.

Все они будут закрыты после выполнения команды killall.

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

$ kill 1234 1233 1232

Итак, есть два ключевых различия:

  • kill принимает ID номера процессов в качестве аргумента и убивает только один процесс за раз (если вы не укажете несколько ID процессов в команде).
  • killall позволяет нам убивать процессы по имени и завершает все процессы, у которых совпадает имя.

kill -9 и killall -9

По умолчанию kill и killall пытаются остановить процесс настолько изящно, насколько это возможно.

Обе команды посылают сигнал SIGTERM указанному процессу, который дает команду на завершение процесса.

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

Единственная проблема заключается в том, что упрямая программа может проигнорировать сигнал SIGTERM.

Это происходит, в частности, в замороженном или “зависшем” процессе.

Однако kill и killall можно использовать для посылки множества различных сигналов процессу и даже заставить самые упрямые из них закрыться с помощью сигнала SIGKILL.

Чтобы послать сигнал SIGKILL с помощью kill или killall, вы должны использовать следующий синтаксис команды:

Принудительно закрыть процесс, послав сигнал SIGKILL с помощью команды kill:

$ kill -9 1234

Принудительное закрытие процесса или нескольких процессов путем отправки сигнала SIGKILL с помощью killall:

$ killall -9 firefox

Когда это возможно, следует посылать обычный сигнал SIGTERM процессу, который вы хотите завершить.

Немедленное уничтожение службы с помощью сигнала SIGKILL эффективно всегда и даст вам мгновенный результат, но может привести к будущим проблемам, поскольку процесс не успел завершить работу должным образом.

Заключение

В этом руководстве мы узнали разницу между командами kill и killall в Linux.

Мы также рассмотрели примеры использования каждой из них для отправки сигналов SIGTERM или SIGKILL одному или нескольким процессам.

См. также:

 

Поделитесь статьей:

Добавить комментарий