В Linux вы можете управлять процессами, отправляя им сигналы. Основная команда для этого — kill, которая, несмотря на свое название, может отправлять различные сигналы, а не только те, которые завершают процесс.
Завершение по умолчанию с помощью kill sigterm
Когда вы используете команду kill только с идентификатором процесса (PID), по умолчанию она отправляет сигнал TERM. Это стандартный, корректный способ попросить программу завершить работу.
kill 12445
Сигнал kill sigterm (также известный как SIGTERM или сигнал 15) запрашивает чистое завершение работы процесса. Это дает процессу возможность сохранить свой прогресс и корректно освободить ресурсы. Вы также можете явно использовать номер сигнала, делая kill -15 12445 эквивалентным предыдущей команде. Это отвечает на частый запрос kill -15 linux.
Принудительное завершение с помощью SIGKILL
Иногда процесс перестает отвечать и не реагирует на сигнал SIGTERM. В таких случаях вы можете заставить его остановиться, используя сигнал KILL.
kill -9 12445
Сигнал SIGKILL (сигнал 9) немедленно завершает процесс, не давая ему возможности выполнить очистку. Это ключевое различие в споре о kill vs terminate; SIGKILL — это безусловное завершение, тогда как SIGTERM — вежливая просьба.
Понимание других распространенных сигналов
Хотя SIGTERM и SIGKILL являются наиболее распространенными, другие сигналы также полезны для управления процессами.
- SIGHUP: Сигнал
kill sighup(Hangup, сигнал 1) традиционно отправляется процессу при закрытии его управляющего терминала. Его можно использовать для того, чтобы демоны перезагрузили свои файлы конфигурации. - SIGINT: Сигнал прерывания (сигнал 2) отправляется при нажатии
Ctrl-C. Он запрашивает у процесса прервать текущую операцию. - SIGSTOP: Этот сигнал (сигнал 19) приостанавливает процесс, не завершая его. Процесс можно возобновить позже с помощью сигнала
SIGCONT.
Проверка существования процесса с помощью kill -0
Особый случай использования — linux kill -0. Эта команда на самом деле не отправляет сигнал, а проверяет, существует ли процесс с указанным PID и есть ли у вас разрешение на отправку ему сигнала.
kill -0 12445
Если команда выполняется успешно (код выхода 0), процесс существует. Если она завершается неудачей, процесс не существует или у вас нет разрешений.