Убиваем процессы в Linux

Рассказываем, как завершить работу одного или нескольких процессов в разных дистрибутивах Linux.

Сигналы завершения процессов в Linux

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

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

  • SIGINT — это относительно щадящий сигнал завершения работы. Его можно послать, одновременно нажав клавиши Ctrl + C . Этот сигнал разрешает процессу завершить выполнение своей работы, удалить после себя весь мусор и спокойно уйти на покой.
  • SIGQUIT — этот сигнал также пытается убить процесс, предлагая ему закончить свою работу, но процесс может проигнорировать этот запрос и тут же закрыться. При этом SIGQUIT формирует некий слепой (дамп памяти) программы для восстановления данных при повторном запуске. Чтобы его послать, нужно одновременно нажать клавиши Ctrl + / .
  • SIGHUP — этот сигнал отправляется автоматически, когда теряется интернет-соединение между управляющим компьютером и сервером.
  • SIGTERM — сигнал, убивающий процесс, который обрабатывается программой.
  • SIGKILL — убивает процесс, игнорируя зависимости, которые остаются активными.

Как завершить процесс в Linux

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

Допустим, находясь в терминале, вы запустили собственный node.js сервер и хотите прекратить его работу (или же начали загрузку какого-то пакета). Эти задачи можно прервать, нажав одну из двух комбинаций клавиш:

  1. Ctrl + C — чтобы отправить сигнал SIGINT и завершить процесс в щадящем режиме.
  2. Ctrl + / — чтобы дать процессу возможность игнорировать завершение сторонних задач.

С помощью команды kill

Если нужно передать сигнал завершения процесса какой-то программе, которая работает в фоновом режиме, можно воспользоваться командной kill .

У этой команды следующая структура: сначала отправляется сама команда kill , затем указывается тип сигнала (например -TERM ), а следом номер процесса, так называемый process ID.

$ kill -TERM 10528

С первыми двумя составляющими команды все понятно. kill никогда не меняется, вместо -TERM можно вписать другой сигнал, а вот PID сначала нужно отыскать.

Для этого используется команда ps aux | grep название программы .

Вот несколько примеров:

  • Открываем терминал.
  • Вводим туда команду ps aux | grep ping.
Вводим туда команду ps aux | grep ping

Ищем процесс

  • Находим процесс с нужным номером.
Находим процесс с нужным номером.

Фиксируем номер

  • Убиваем его командой kill — TERM.
Убиваем его командой kill — TERM

Убиваем

Вот та же самая процедура, но более наглядно. В одном окне терминала запущена программа ping, и в реальном времени она посылает сигналы на сайт. Во втором окне я прописал команду ps aux | grep ping. Терминал выдал мне список процессов с таким названием. Я нашел среди них свой, он запущен под Process ID 8823.

Терминал выдал мне список процессов с таким названием

Это наше пространство для проведения эксперимента

Теперь я могу закрыть этот процесс, введя команду kill -TERM 8823.

Теперь я могу закрыть этот процесс, введя команду kill -TERM 8823

Номер PID указан в самом начале каждой строки

И мне даже не нужно проверять, действительно он завершился или нет. В оболочке Gnome 3 в центре уведомлений тут же появилось соответствующее сообщение.

Команда ping youtube.com завершила свою работу. Все произошло так, как нам было нужно

Команда ping youtube.com завершила свою работу. Все произошло так, как нам было нужно

С помощью команды pkill

pkill — это не отдельная программа, а надстройка над kill. Разница между ними заключается в том, что для запуска первой не требуется сначала выяснять PID. Программа pkill анализирует содержимое директории proc, сравнивает введенное название программы с PID, который указан там, и затем посылает сигнал завершения работы по указанному адресу.

По описанию процесс кажется замысловатым, но по факту для конечного пользователя все выглядит просто.

  • Открываем терминал.
  • Вводим команду pkill, а следом за ней название процесса, который нужно убить.
  • Для примера введем команду pkill ping.
Для примера введем команду pkill ping

В нашем примере опять будем убивать ping, только теперь без PID. Нам не пришлось искать никакие номера и анализировать их

  • И все.
По уведомлению видно, что команда pkill сработала

По уведомлению видно, что команда pkill сработала

С помощью команды killall

Описанные выше методы хорошо работают, если нужно завершить один процесс. А когда перед нами условный Google Chrome, создавший по процессу на каждую вкладку, то приходится туго. Закрывать все вручную сложновато. Для этого и нужна команда killall.

У нее такой же синтаксис, как у pkill. Просто вводите команду, а следом за ней название программы, которую нужно убить.

Вот так, к примеру, можно полностью вывести из строя браузер Firefox. Он даже не успеет никаких вопрос задать

Вот так, к примеру, можно полностью вывести из строя браузер Firefox. Он даже не успеет никаких вопрос задать

EnglishRussianUkrainian