![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Механизм сигналов — это средство, позволяющее сообщать процессам о некоторых событиях в системе, а процессу-получателю — должным образом на эти сообщения реагировать. Послать сигнал может сам процесс (например, при попытке деления на ноль), ядро (при сбое оборудования), пользователь или другой процесс (требуя прервать выполнение задачи).
Всего в 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; Прочитано: 673 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!