Команды kill vs killall (Linux)

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

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

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

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

$ kill 1234

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

$ killall firefox

В этом примере все процессы с именем "firefox" будут завершены. Неважно, открыто ли у вас только 1 окно Firefox или 50. Все они будут закрыты после выполнения команды killall. Обратите внимание, что вы все еще можете завершить несколько процессов одновременно с помощью обычной команды kill, но вам нужно будет указать идентификатор каждого процесса, который вы хотите завершить. 

$ kill 1234 1235 1236

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

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

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

$ kill -9 1234

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

$ killall -9 firefox

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


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