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

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

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

  • Сигналы завершения процессов в Linux
  • Как завершить процесс в Linux
    • С помощью команды kill
    • С помощью команды pkill
    • С помощью команды killall

Сигналы завершения процессов в 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.

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

Ищем процесс

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

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

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

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

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

Убиваем

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • И все.

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

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

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

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

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

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

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

Источник