программы также могут выбирать, нужно
программы также могут выбирать, нужно ли им перехватывать сигнал SIGINT, есть выполнять специальную процедуру реакции на поступление сигнала, и полагаться на действие по умолчанию для данного сигнала.
Сигналы также используются ядром для обработки определенных типов критических ошибок. Например, предположим, что файл программы поврежден и содержит недопустимые машинные инструкции. При выполнении этой программы процессом, ядро определит попытку выполнения недопустимой инструкции и пошлет процессу сигнал SIGILL (здесь ILL является сокращением от illegal, то есть недопустимый) для завершения его работы. Получившийся диалог может выглядеть примерно так:
$ badprog
illegal instruction - core dumped
Смысл термина core dumped (сброс образа памяти) будет объяснен ниже.
Сигналы могут посылаться не только от ядра к процессу, но и между процессами. Проще всего показать это на примере команды kill. Предположим, например, что программист запускает в фоновом режиме длительную команду
$ fpc verybigprog.pas &
[1] 1098
а затем решает завершить ее работу. Тогда, чтобы послать процессу сигнал SIGTERM, можно использовать команду kill. Так же, как и сигнал SIGINT, сигнал SIGTERM завершит процесс, если в процессе не переопределена стандартная реакция на этот сигнал. В качестве аргумента команды kill должен быть задан идентификатор процесса:
$ kill 1098
Terminated
Сигналы обеспечивают простой метод программного прерывания работы процессов UNIX. Образно можно сравнить его с похлопыванием по плечу, отвлекающим от работы. Из-за своей природы сигналы обычно используются для обработки исключительных ситуаций, а не для обмена данными между процессами.
Процесс может выполнять три действия с сигналами, а именно:
–
изменять свою реакцию на поступление определенного сигнала (изменять обработку сигналов);
– блокировать сигналы (то есть откладывать их обработку) на время выполнения определенных критических участков кода;
– посылать сигналы другим процессам.
Каждое из этих действий будет рассмотрено далее в этой главе.
Содержание Назад Вперед