Здавалка
Главная | Обратная связь

Сигналы - общие сведения.



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

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

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

Если процесс находится в состоянии "добровольного" приостанова (вызванного, например, выполнением системного вызова sleep ()), то получение сигнала "пробуждает процесс от сна", независимо от того, в чем состояла обработка сигнала, системный вызов sleep () заканчивается немедленно.

 

sleep (3)

приостановка процесса

Синтаксис

#include <unistd.h>

unsigned int sleep(unsigned int sec);

Описание

sleep приостанавливает выполнение процесса на sec секунд. Приостановка переводит процесс в состояние ожидания, в котором он не требует использования центрального процессора.

Параметры

sec - число секунд ожидания.

Возвращаемое значение

0 - если заданный интервал ожидания отработан полностью, остаток интервала - в противном случае.

Обработчик сигнала в процессе имеет вид функции с прототипом:

void имя_функции(int sigtype);

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

Для установки своего обработчика сигнала, для его отмены или для установки игнорирования сигнала используется системный вызов signal ().

signal () обработка сигнала

 

Синтаксис

#include <signal.h>

void ( +signal ( int signum, void ( *handier) (int) ) ) (int) ;

Описание

Системный вызов signal устанавливает новый обработчик сигнала заданного типа.

Параметры

signum Тип сигнала. Некоторые типы сигналов в Linux:

SIGKILL Этот сигнал приводит к немедленному завершению процесса. Этот сигнал процесс не может игнорировать или установить для него новый обработчик.

SIGTERM Этот сигнал является запросом на завершение процесса.

SIGCHLD Система посылает этот сигнал процессу при завершении одного из его дочерних процессов.

SIGALRM Доставка этого сигнала планируется функциями alarm () и setitimer()

SIGUSR1,

SIGOSR2 Эти сигналы зарезервированы для прикладного использования

SIGHUP Система посылает этот сигнал, когда происходит отключение от терминала.

SIGINT Система посылает этот сигнал, когда пользователь нажимает комбинацию клавиш Ctrl+C.

SIGILL Система посылает этот сигнал при попытке выполнить недопустимую операцию.

SIGFPE Система посылает этот сигнал при попытке выполнить недопустимую операцию с плавающей точкой.

SIGSEGV Система посылает этот сигнал при выполнении программой недопустимого обращения к памяти.

SIGPIPE Система посылает этот сигнал при обращении программы к разрушенному потоку данных.

handler Обработчик сигнала или одно из следующих имен:

SIG_IGN - игнорировать сигнал;

SIG__DFL - установить обработку сигнала по умолчанию.

Обработчик сигнала должен быть функцией, объявляемой по такому прототипу:

void имя_обработчика(int signum);

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.