Linux Labs

Пользователи, права, процессы / Ступень 12 из 13

Сигналы и завершение процессов

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 9 · теория · 5 мин

Просьба и приказ

Обе команды остановили выгрузку, но одна дала ей закончить работу, а другая оборвала. В этом шаге — чем они отличаются.

kill посылает процессу сигнал — короткое сообщение с номером и именем. Что делать с сигналом, решает программа, а несколько сигналов решает ядро:

Сигнал Что делает
TERM (15) просит завершиться; его посылает kill без ключа
INT (2) прерывает; его посылает Ctrl+C
KILL (9) ядро завершает процесс сразу, программа ничего не успевает

На TERM программа может ответить по-своему: дописать данные, закрыть файлы и выйти. Выгрузка a так и сделала — дописала saved и завершилась, а оболочка сообщила Done. KILL программа не видит: ядро обрывает процесс там, где его застал сигнал, и оболочка пишет Killed.

Сигнал называют именем или номером: kill -9, kill -KILL и kill -s KILL — одно и то же. Весь список печатает kill -l.

Проверь себя 1 вопрос

kill 2345 выполнился без ошибки, но через пять секунд ps -p 2345 всё ещё показывает процесс. Что сделаешь?

  • Второй TERM — та же просьба: программа уже знает, что её просят завершиться. Проверь ps -p 2345 через несколько секунд.

  • Перезагрузка оборвёт все программы машины. Сначала дай процессу закончить работу и проверь ps -p 2345 снова.

  • TERM — просьба: программа может ещё дописывать данные. kill -9 оборвёт её посреди записи, как выгрузку b.

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

Главное в шаге

  • kill без ключа посылает TERM — просьбу завершиться, на которую программа может сохранить работу.
  • kill -9 (KILL) завершает процесс сразу: недописанное пропадает.
  • Поэтому сначала TERM, а KILL — когда процесс не завершается сам.
Ubuntu 24.04
Загрузка…