Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Сигналы в Linux



Механизм сигналов — это средство, позволяющее сообщать процессам о некоторых событиях в системе, а процессу-получателю — должным образом на эти сообщения реагировать. Послать сигнал может сам процесс (например, при попытке деления на ноль), ядро (при сбое оборудования), пользователь или другой процесс (требуя прервать выполнение задачи).

Всего в Linux 63 сигнала, обозначаемых своими номерами или символическими именами.

Имена всех сигналов начинаются с SIG, и эту приставку часто опускают: так, сигнал, требующий прекратить выполнение процесса, называется SIGKILL, или KILL, или сигнал 9.

Получив сигнал, процесс может: игнорировать его; вызвать для обработки установленную по умолчанию функцию; вызвать собственный обработчик (перехватить сигнал).

Некоторые сигналы (например, KILL) перехватить или игнорировать невозможно.

Пользователь может послать сигнал процессу с идентификатором PID командой

$ kill [-s <сигнал>] <PID>

где <сигнал> — это номер или символическое имя.

Несколько часто встречающихся сигналов перечислены в таблице 1. Полный список можно получить по команде kill -l (list).

Таблица 1. Сигналы Linux

Имя Назначение Реакция процесса-получателя
  HUP Hangup — отбой Демоны перечитывают свои конфигурационные файлы
  INT Interrupt Прекратить выполнение (перехватывается)
  QUIT Сильнее, чем INT тоже
  ILL Программная ошибка Обработать ошибку. По умолчанию — прекратить выполнение
  FPE Floating point exception, вычислительная ошибка (деление на ноль) Обработать ошибку. По умолчанию —прекратить выполнение
  KILL Убить процесс Немедленно прекратить выполнение. Не перехватывается
  SEGV Segmentation violation. Попытка доступа к чужой области памяти Обработать ошибку. По умолчанию — прекратить выполнение
  PIPE Нет процесса, читающего из конвейера Обработать ошибку. Корректно завершить выполнение Перехватывается.
  TERM Termination. Завершить процесс
  CHLD Завершился дочерний процесс Принять возвращенное им значение
  CONT Продолжить работу Продолжить работу приостановленного процесса
  STOP Приостановить процесс Приостановить выполнение

Сообщение-сигнал не содержит никакой информации, кроме номера сигнала (для удобства вместо номера можно использовать предопределенное системой имя). Для того чтобы передать сигнал, процессу достаточно задействовать системный вызов kill(), а для того чтобы принять сигнал, не нужно ничего. Если процессу необходимо как-то по-особенному реагировать на сигнал, он может зарегистрировать обработчик, а если обработчика нет, за него отреагирует система. Как правило, это приводит к немедленному завершению процесса, получившего сигнал. Обработчик сигнала запускается асинхронно, немедленно после получения сигнала, что бы процесс в это время ни делал.

Два сигнала – 9 (KILL) и 19 (STOP) – всегда обрабатывает система. Первый из них нужен для того, чтобы убить процесс наверняка (отсюда и название).

Сигнал STOP приостанавливает процесс: в таком состоянии процесс не удаляется из таблицы процессов, но и не выполняется до тех пор, пока не получит сигнал 18 (CONT) – после чего продолжит работу.

В Linux сигналы можно передать активному процессу с помощью управляющих символов:

Interrupt - ^C (Ctrl+C)

Stop - ^Z"

Terminate - ^D.





Дата публикования: 2015-10-09; Прочитано: 649 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...