С чего начать Первые шаги трек · 15 ступеней
Linux Labs

kill — послать сигнал процессу

5 мин Ubuntu 24.04 · Bash 5.2 · procps-ng 4.0.4

Команда kill посылает процессу сигнал по PID: вежливо завершить (TERM), перечитать настройки (HUP), убить сразу (KILL).

Шпаргалка

10 команд Версия для печати
  • 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:

text
student@ubuntu:~$ sleep 600 &
[1] 1520
student@ubuntu:~$ kill 1520
[1]+  Terminated              sleep 600

Посылать сигналы можно только своим процессам. Чужим — через sudo.

Ключи

7

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

Ничего не найдено. Попробуй запрос короче.

Рецепты

4

Завершить процесс правильно

bash
kill 1520          # сначала TERM
sleep 5
kill -0 1520 && kill -KILL 1520   # всё ещё жив — тогда KILL

TERM даёт программе закрыть файлы и удалить временные. KILL — крайняя мера.

Завершить по имени

bash
pgrep -a sleep           # сначала посмотреть, кого заденет
pkill sleep              # TERM всем процессам с именем sleep
pkill -f 'app.py --dev'  # по всей командной строке
killall -v nginx         # по точному имени программы

pkill сравнивает часть имени: pkill ssh заденет и sshd. Проверяй список через pgrep -a с тем же шаблоном. killall из пакета psmisc ищет точное имя, но в минимальной системе его может не быть.

Службу — через systemctl

bash
sudo systemctl restart nginx   # вместо kill и ручного запуска
sudo systemctl kill -s HUP nginx

systemd перезапустит убитую через kill службу, если у неё Restart= — см. systemctl.

Процесс завис в терминале

Ctrl+C посылает INT, Ctrl+Z — TSTP (останавливает и возвращает приглашение). После Ctrl+Z: kill %1 или fg — см. background-jobs.

Неполадки

5

kill: (12345) - No such process

Процесса с таким PID уже нет: он завершился или PID набран с ошибкой. Найди актуальный: pgrep -a имя.

kill: (1) - Operation not permitted

Процесс принадлежит другому пользователю или root. Проверь владельца в ps -o user= -p PID; если сигнал действительно нужен — sudo kill PID.

После kill процесс всё ещё в списке

Состояние Z (зомби): процесс завершился, родитель не забрал код. Сигналы ему не нужны — завершай или перезапускай родителя (ps -o ppid= -p PID). Состояние D: процесс ждёт диск, сигнал подействует после ввода-вывода.

Процесс вернулся после kill

Его перезапускает systemd или другой надзиратель. Смотри systemctl status PID и останавливай службу: sudo systemctl stop имя.

kill: invalid signal specification

Такого сигнала нет — чаще всего опечатка в имени. Пиши -TERM, -HUP, -KILL или номер -15; полный список печатает kill -l.

Опасно

2

kill -9 первым ходом

KILL не даёт программе сохранить данные: база данных может остаться с незавершённой записью, после программы — лок-файлы и временные файлы, из-за которых она потом не стартует. Сначала TERM и несколько секунд ожидания.

Широкий шаблон pkill и kill -1

pkill -f python завершит все Python-программы на машине, если запустить его через sudo. kill -9 -1 посылает KILL всем твоим процессам, включая оболочку, — сессия оборвётся. Перед pkill всегда pgrep -a с тем же шаблоном.

См. также

  • pgrep — список процессов перед pkill с теми же условиями.
  • ps — найти PID и состояние процесса.
  • top — найти прожорливый процесс; k в top посылает сигнал.
  • processes — сигналы, состояния и приоритеты подробнее.
  • background-jobs — Ctrl+Z, jobs, fg, kill %1.
  • systemctl — остановить или перезапустить службу правильно.
Загрузка…