Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
92
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Сигналы

Сигналы являются средством передачи уведомления о некотором произошедшем событии между процессами или между ядром системы и процессами. Сигналы рассматриваются как форма межпроцессорного взаимодействия, хотя, по сути, напоминают прерывания, генерируемые при возникновении определённых событий. Каждому типу сигналов присвоено мнемоническое имя, которое указывает, для чего обычно используется сигнал этого типа. Имена сигналов освещены в файле <signal.h>

Основные сигналы:

  1. SIGABR (process abort signal) – сигнал прерывания процесса. Посылается процессу при вызове им функции abort. В результате произойдёт аварийное завершение процесса. Осуществится сброс образа памяти процесса (dump памяти) и выведется сообщение QUIT. Образ памяти процесса сохранится в памяти на диске. С ним можно работать с помощью отладчика.

  2. SIGALRM (alarm clock) – сигнал таймера. Посылается процессу ядром при срабатывании таймера. Каждый процесс может установить не менее 3-ёх таймеров. 1-ый из них измеряет прошедшее и реальное время. Этот таймер устанавливается самим процессом при помощи системного вызова alarm.

  3. SIGBUS (bus error) – сигнал ошибки на шине. Посылается при возникновении некоторой аппаратной ошибки. Например, обращение к некоторому виртуальному адресу, для которого нет соответствующего физического адреса. 1-ый и 3-ий сигналы вызывают аварийное завершение процесса.

  4. SIGCHLD (child process terminated or stopped) – сигнал остановки или завершения дочернего процесса. Ядро сообщает родительскому процессу о том, что родительский процесс остаётся или завершается. По умолчанию родительский процесс игнорирует этот сигнал.

  5. SIGCOOND (continue executing if stopped) – продолжение работы остановленного процесса. Сигнал управления процессом, который вызывает продолжение процесса, если тот был остановлен. В противном случае этот сигнал игнорируется. (Обратный сигнал SIGSTOP).

  6. SIGHUP (hungup signal) – сигнал освобождения линии. Посылается ядром всем процессам, подключается к управляющему терминалу при отключении этого терминала. Это гарантирует, что если не предприняты специальные меры, то при выходе пользователя из системы завершаются все фоновые процессы, запущенные этим пользователем.

  7. SIGILL (illegal instruction) – недопустимая команда процессора. Результат – аварийное завершение программы.

  8. SIGINT (interrupt) – сигнал прерывания программы. Посылается ядром всем процессам-сеансам, связанным с терминалом, когда пользователь нажимает клавишу прерывания (DEL или Ctrl+C). Это простой способ завершения программы.

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

  10. SIGPIPE (write or a pipe or socket when recipient is terminated) – сигнал о попытке записи в канал или сокет, для которых принимающий процесс уже завершил работу.

  11. SIGPOLL (pollable event) – сигнал о возникновении одного из запрашиваемых событий. Этот сигнал генерируется ядром, когда некоторый открытый дескриптор файла становится готовым для ввода или вывода.

  12. SIGQUIT (quit) – сигнал о выходе. Посылается ядром при нажатии пользователем клавиши выхода (Ctrl+\). Приводит к аварийному завершению и сбросу образа памяти.

  13. SIGEVG (invalid memory reference) – обращение к некорректному адресу памяти. Получение сигнала приводит к аварийному завершению.

  14. SIGSTOP (stop executing) – сигнал остановок. Сигнал управления системными заданиями, которые останавливают процесс. Сигнал нельзя игнорировать или перехватить.

  15. SIGSYS (invalid system call) – некорректный системный вызов. Посылается ядром, если процесс пытается выполнить некорректный системный вызвов. Приводит к аварийному завершению.

  16. SIGTERM (software termination signal) – программный сигнал завершения. Может предварять сигнал SIGKILL для того, чтобы процесс подготовился к своему завершению.

  17. SIGTSTP (terminal stop signal) – терминальный сигнал остановок. Формируется при нажатии Ctrl+Z. Аналогичен SIGSTOP, но его можно перехватить или игнорировать.

  18. SIGUSR1, SIGUSR2 (user defined signal 1 or 2) – пользовательские сигналы. Посылается только процессами пользователя и может использоваться по усмотрению пользователя.

  19. SIGPROF (profiling time expired) – сигнал профилирующего таймера. Второй таймер процесса может использоваться для измерения времени выполнения процесса в пользовательских и системных режимах. Этот сигнал генерируется, когда истекает время, установленное в этом таймере.

  20. SIGVTALARM (virtual time expired) – это сигнал виртуального таймера, сигнал третьего таймера, который можно установить так, чтобы он измерял время, которое процесс выполнит в пользовательском режиме.

  21. SIGXCPU (CPU time limit executed) – сигнал о превышении лимита процессорного времени. Посылается процессу, если суммарное время процессора, занятое его работой превысило установленный предел. По умолчанию – завершение процесса.

  22. SIGXFSZ (file size limit excepted) – сигнал о превышении предела на размер файла. Генерируется, если процесс превысил максимальный размер файла. По умолчанию – аварийное завершение.

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

    1. Утанавливать свой обработчик сигналов (изменять предопределённую форму реагирования на конкретный сигнал).

    2. Блокировать сигналы на время выполнения определённых критических участков кода.

    3. Посылать сигналы другим процессам.