Завершить процесс правильно
TERM даёт программе закрыть файлы и удалить временные. KILL — крайняя мера.
Команда kill посылает процессу сигнал по PID: вежливо завершить (TERM), перечитать настройки (HUP), убить сразу (KILL).
kill 1234
SIGTERM: попросить завершиться
kill -TERM 1234
то же явно (-15)
kill -HUP 1234
перечитать настройки (у многих служб)
kill -KILL 1234
SIGKILL: убить сразу, без уборки (-9)
kill -STOP 1234
приостановить; -CONT — продолжить
kill -0 1234
жив ли процесс (ничего не посылает)
kill %1
задачу 1 этого терминала
kill -l
список сигналов
pkill -f 'python app.py'
по шаблону командной строки
pkill -u student sleep
по имени у одного пользователя
kill не обязательно убивает: он посылает процессу сигнал. Что
делать с сигналом, решает сам процесс, кроме двух — KILL и STOP, их выполняет
ядро.
| Сигнал | Номер | Что значит |
|---|---|---|
TERM |
15 | завершись: сохрани данные, убери за собой (по умолчанию) |
INT |
2 | прерывание — то же, что Ctrl+C |
HUP |
1 | многие службы перечитывают настройки |
KILL |
9 | ядро снимает процесс сразу, без уборки |
STOP / CONT |
19 / 18 | заморозить / разморозить |
Номер процесса берут из ps, top или pgrep:
Посылать сигналы можно только своим процессам. Чужим — через sudo.
kill, который ты набираешь, — встроенная команда Bash: она понимает %1 (номер
задачи). Отдельная программа /bin/kill делает то же для PID. Полный список —
help kill и man kill.
| Ключ | Что делает | Пример |
|---|---|---|
-TERM |
Попросить процесс завершиться (15, сигнал по умолчанию). | kill -TERM 1234 |
-KILL |
Снять процесс сразу, без уборки (9). Только если TERM не помог. опасно | kill -KILL 1234 |
-HUP |
Сигнал 1 — многие службы перечитывают по нему настройки. | kill -HUP 1234 |
-0 |
Ничего не посылать — только проверить, что процесс есть и доступен. | kill -0 1234 |
-l |
Напечатать список сигналов; -l 9 — имя сигнала по номеру. | kill -l |
-STOP |
Заморозить процесс (19); продолжить — -CONT. | kill -STOP 1234 |
-s signal |
Сигнал по имени или номеру — то же, что -ИМЯ. | kill -s HUP 1234 |
Ничего не найдено. Попробуй запрос короче.
TERM даёт программе закрыть файлы и удалить временные. KILL — крайняя мера.
pkill сравнивает часть имени: pkill ssh заденет и sshd. Проверяй список
через pgrep -a с тем же шаблоном. killall из пакета psmisc ищет точное имя,
но в минимальной системе его может не быть.
systemd перезапустит убитую через kill службу, если у неё Restart= — см.
systemctl.
Ctrl+C посылает INT, Ctrl+Z — TSTP (останавливает и возвращает приглашение).
После Ctrl+Z: kill %1 или fg — см. background-jobs.
Процесса с таким PID уже нет: он завершился или PID набран с ошибкой. Найди
актуальный: pgrep -a имя.
Процесс принадлежит другому пользователю или root. Проверь владельца в ps -o
user= -p PID; если сигнал действительно нужен — sudo kill PID.
Состояние Z (зомби): процесс завершился, родитель не забрал код. Сигналы ему не
нужны — завершай или перезапускай родителя (ps -o ppid= -p PID). Состояние D:
процесс ждёт диск, сигнал подействует после ввода-вывода.
Его перезапускает systemd или другой надзиратель. Смотри systemctl status PID и
останавливай службу: sudo systemctl stop имя.
Такого сигнала нет — чаще всего опечатка в имени. Пиши -TERM, -HUP, -KILL
или номер -15; полный список печатает kill -l.
kill -9 первым ходомKILL не даёт программе сохранить данные: база данных может остаться с незавершённой записью, после программы — лок-файлы и временные файлы, из-за которых она потом не стартует. Сначала TERM и несколько секунд ожидания.
pkill -f python завершит все Python-программы на машине, если запустить его через
sudo. kill -9 -1 посылает KILL всем твоим процессам, включая оболочку, — сессия
оборвётся. Перед pkill всегда pgrep -a с тем же шаблоном.
pkill с теми же условиями.k в top посылает сигнал.jobs, fg, kill %1.Есть неточность? Сообщить об ошибке в статье