Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast2.doc
Скачиваний:
11
Добавлен:
06.11.2018
Размер:
523.26 Кб
Скачать

Сигналы

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

  • прекращение выполнения программы в результате ошибочного действия, неправильного исходного параметра или если программа больше не нужна;

  • временная остановка процесса;

  • получение информации для системной программы, например, об изменении важного файла;

  • пересылка сообщения между двумя процессами, один из которых сообщает второму, что он закончил выполнение какого-то определенного задания.

Для этого предусмотрены сигналы. Однако под ними не следует понимать нечто вроде зеленого или красного сигнала светофора, Они, скорее всего, напоминают условное «перестукивание», с помощью которого процесс узнает, что произошло нечто важное. При этом процесс узнает, что произошло нечто важное. При этом процесс может реагировать трояко:

  • игнорировать сигнал. Все работает так, как будто ничего не случилось;

  • принять сигнал. Процесс запускает программу обработки сигнала, которая, является причиной всех последующих действий. Нормальный ход работы не прерывается;

  • интерпретировать сигнал согласно процедурам, установленным по умолчанию. Чаще всего процесс должен прекратить работу. В большинстве случаев это означает немедленное его завершение, но сигналы STOP, TSTP, ТТIN, ТТОU только задерживают его работу, которая может быть продолжена сигналом СОNT.

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

В табл. 7.2 дан перечень важнейших сигналов и их значений. Имена сигналов указаны без обычного добавления SIG. Как правило, вместо INT используется обозначение SIGINT. Номера сигналов даны только в качестве дополнительной информации, так как, к счастью, они одинаковы для большинства систем. Противоречий между номерами и именами сигналов нет.

Важнейшие сигналы

Таблица 7.2

Название

Номер

Значение

HUP

1

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

Эта программа отправляет сигнал HUP всем процессам, которые находятся под ее контролем и затем сами закрываются.

INT

2

Interrupt. Этот сигнал чаще всего генерируется комбинацией клавиш Ctrl+C или Del. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах прекращение активного процесса.

QUIT

3

Quit. Как правило, сильнее сигнала Interrupt. Обычно вызывается сочетанием клавиш Ctrl+\.

ILL

4

Illegal Instruction. Центральный процессор столкнулся с незнакомой командой. Сигнал отправляется программе, в которой возникла проблема. В большинстве случаев это означает, что допущена программная ошибка.

KILL

9

KILL. Всегда убивает процесс.

Окончание табл. 7.2

SEGV

11

SegmentationViolation. Появляется в результате доступа к недозволенной области памяти. Обычно означает ошибку программы или отсутствие свободной памяти.

TERM

15

Software Termination. Требование закончить процесс.

CHILD

17

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

CONT

18

Continue. Повторный запуск остановленной программы.

STOP

19

Stop. Останов программы.

TSTP

20

Terminal Stop. Останов программы, обычно вырабатывается клавишами Ctrl+Z.

TTIN

21

Terminal Interrupt. Этот сигнал получают процессы, работающие в фоновом режиме, но все еще пытающиеся прочитать данные с терминала.

При написании программ на С к началу имени сигнала в таблице добавляется SIG.

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

В качестве простого примера использования сигналов давайте посмотрим, что произойдет, если нажать клавиши Ctrl+C. Драйвер терминала обработает введенную комбинацию клавиш и выдаст в группу активных процессов сигнал прерывания INT. Поскольку в подпрограмме обработки сигнала INT по умолчанию задано завершение, выполнение большинства программ при получении этого сигнала завершается.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]