Команда kill используется для того, чтобы остановить работу процесса, синтаксис команды:
sudo kill ИДЕНТИФИКАТОР-ПРОЦЕССА
Связанная статья: В чём различия и как пользоваться командами kill, pkill и killall
Вы можете столкнуться с ситуацией, когда использование kill не приводит к завершению процесса.
Получить идентификатор процесса зная имя исполнимого файла можно командой:
ps -e | grep 'ИМЯ'
Этой же командой можно проверять, работает ли ещё процесс.
Связанная статья: Как использовать команду ps для мониторинга процессов Linux
Обычно достаточно команды kill для остановки большинства процессов. Но может быть так, что какой-то процесс совершенно не реагирует на kill, в том числе если запустить её с sudo.
Название команды kill продолжает вводить в заблуждение многих, многих пользователей (включая меня в начале). Предполагается, что когда вы говорите «kill X», это в точности означает «убить процесс X». Но на самом деле это далеко не так. Команда kill всего лишь посылает процессу один из сигналов.
Если kill вызывается без каких-либо параметров, он отправляет сигнал номер 15 (SIGTERM). Этот сигнал может игнорироваться процессом. Этот сигнал уведомляет процесс о необходимости привести в порядок свои вещи, а затем процесс сам правильно завершает работу. Это хороший способ.
Вы также можете «послать» сигнал номер 9 (SIGKILL), который процесс не может игнорировать. Процесс даже не распознает его, потому что ядро завершает процесс, а не сам процесс. Это злой путь.
Процессы могут игнорировать некоторые сигналы. Если вы отправите SIGKILL, он не сможет его игнорировать и не выполнит подготовительные для завершения действия, например, сохранение данных или очистку.
Попробуйте:
kill -9 ИДЕНТИФИКАТОР-ПРОЦЕССА
Если вы приостановите процесс с помощью CTRL-z, он будет блокировать большинство сигналов, пока он приостановлен (то есть, пока вы не выполните fg или bg для процесса).
Также обратите внимание, что в некоторых очень специфических обстоятельствах процесс может находиться в состоянии зомби/неработоспособности, что даже SIGKILL не может убить процесс. В этом случае вам нужно будет найти родительский процесс и убить родительский процесс.
Некоторые говорят, что kill -9 <PID> всегда срабатывает. Это заблуждение. Бывают ситуации, когда даже kill -9 не убивает процесс. Например, когда процесс находится в состоянии D (непрерывный сон). Процесс переходит в это состояние каждый раз, когда ожидает ввода-вывода (обычно не очень долго). Итак, если процесс ожидает ввода-вывода (например, на неисправном жёстком диске) и он не запрограммирован должным образом (с таймаутом), то вы просто не можете убить процесс. Что бы вы не делали. Вы просто можете попытаться сделать файл доступным, чтобы процесс продолжился.
Связанные статьи:
- В чём различия и как пользоваться командами kill, pkill и killall (100%)
- Как использовать команду ps для мониторинга процессов Linux (63.4%)
- Как ограничить использование процессора программой в Linux (56.7%)
- Как ограничить использование центрального процессора и памяти в Linux (56.7%)
- Как посмотреть текущую частоту процессора в Linux (50%)
- Systemd изменит работу вашего домашнего каталога Linux (RANDOM - 31.6%)