6. Сигналы

В Linux сигнал — это программное прерывание, отправляемое процессу для уведомления о том, что произошло важное событие. Понимание сигналов Linux является основополагающим для эффективного управления процессами и поведением системы.

Назначение сигналов

Сигналы служат основным методом межпроцессного взаимодействия (IPC). Они используются для многих целей:

  • Взаимодействие с пользователем: Пользователь может ввести специальные символы терминала, такие как Ctrl-C (SIGINT) или Ctrl-Z (SIGTSTP), чтобы прервать или приостановить процессы на переднем плане.
  • Уведомления ядра: Ядро может отправлять сигналы процессу, чтобы уведомить его о проблемах с оборудованием или программным обеспечением, например, о недопустимом доступе к памяти (SIGSEGV).
  • Управление процессами: Системные администраторы и другие процессы используют сигналы для управления жизненным циклом других процессов, например, запрашивая завершение или перезагрузку конфигурации.

Жизненный цикл сигнала

Когда событие генерирует сигнал, он сначала доставляется целевому процессу. Сигнал остается в «ожидающем» состоянии, пока ядро не запустит процесс. Когда процесс планируется, сигнал доставляется. Однако у процессов есть маски сигналов, которые можно настроить для блокировки доставки определенных сигналов.

При доставке сигнала процесс может предпринять одно из нескольких действий:

  • Игнорировать сигнал: Процесс просто отбрасывает сигнал и продолжает выполнение.
  • Перехватить сигнал: Процесс выполняет пользовательскую функцию, называемую обработчиком сигнала, для реагирования на событие.
  • Выполнить действие по умолчанию: Если сигнал не перехвачен и не проигнорирован, выполняется действие по умолчанию. Для многих сигналов это означает завершение процесса.
  • Заблокировать сигнал: Если сигнал находится в маске сигналов процесса, он остается ожидающим до тех пор, пока не будет разблокирован.

Распространенные сигналы процессов Linux

Каждый сигнал определяется целым числом, но почти всегда они обозначаются своими символическими именами (код сигнала ОС), которые начинаются с SIG. Хотя номера могут незначительно различаться в разных архитектурах, имена остаются согласованными. Вот некоторые из наиболее распространенных сигналов процессов Linux:

  • SIGHUP (1): Повешение трубки. Часто используется для указания демону перезагрузить свою конфигурацию.
  • SIGINT (2): Прерывание. Отправляется с помощью Ctrl-C. Это запрос на завершение процесса.
  • SIGKILL (9): Убить. Это немедленное, принудительное завершение. Процесс не может перехватить, игнорировать или заблокировать этот сигнал.
  • SIGSEGV (11): Ошибка сегментации. Указывает на то, что процесс совершил недопустимую ссылку на память.
  • SIGTERM (15): Завершение. Это стандартный, вежливый способ запросить завершение процесса. Это сигнал по умолчанию, отправляемый командой kill. Процесс может перехватить этот сигнал для выполнения очистки перед выходом. Это часто называют сигнал 15 linux.
  • SIGSTOP: Остановка. Приостанавливает процесс. Как и SIGKILL, его нельзя перехватить или проигнорировать.

Ключевое различие между SIGTERM (сигнал Linux 15) и SIGKILL заключается в том, что SIGTERM — это запрос, который может быть обработан, тогда как SIGKILL — это команда, которая немедленно уничтожает процесс.

Войдите, чтобы сохранить ваш прогресс обучения

Вход

Упражнения

Практика ведет к совершенству! Вот практическая лабораторная работа для закрепления вашего понимания процессов и того, как сигналы используются для взаимодействия с ними:

  1. Управление и мониторинг процессов Linux — В этой лаборатории вы изучите основные навыки управления и мониторинга процессов в системе Linux. Вы узнаете, как взаимодействовать с процессами на переднем и заднем планах, просматривать их с помощью ps, отслеживать ресурсы с помощью top, настраивать приоритет с помощью renice и завершать их с помощью kill. Завершение процессов с помощью kill — это прямое применение отправки сигналов.

Эта лаборатория поможет вам применить концепции управления процессами и базового использования сигналов в реальных сценариях и повысить уверенность в администрировании систем Linux.

Тест

Какой сигнал нельзя заблокировать? Пожалуйста, ответьте на английском языке, используя точное название сигнала и обращая внимание на регистр.