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

25.Обработка сигналов.

SIGNAL

signal - работа с сигналами ANSI C

СИНТАКСИС

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

ОПИСАНИЕ

Системный вызов signal() устанавливает новый обработчик сигнала с номером signum в соответствии с параметром sighandler, который может быть функцией пользователя, SIG_IGN или SIG_DFL. При получении процессом сигнала с номером signum происходит следующее: если устанавливаемое значение обработчика равно SIG_IGN, то сигнал игнорируется; если оно равно SIG_DFL, то выполняются стандартные действия, связанные с сигналом. Наконец, если обработчик установлен в функцию sighandler, то сначала устанавливает значение обработчика в SIG_DFL или выполняется зависимая от реализации блокировка сигнала, а затем вызывается функция sighandler с параметром signum.

Использование функции-обработчика сигнала называется "перехватом сигнала". Сигналы SIGKILL и SIGSTOP не могут быть "перехвачены" или игнорированы.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Функция signal() возвращает предыдущее значение обработчика сигнала или SIG_ERR при ошибке.

SIGACTION

sigaction, sigprocmask, sigpending, sigsuspend - POSIX-функции обработки сигналов.

СИНТАКСИС

#include <signal.h>

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

int sigpending(sigset_t *set);

int sigsuspend(const sigset_t *mask);

ОПИСАНИЕ

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

Параметр signum задает номер сигнала и может быть равен любому номеру, кроме SIGKILL и SIGSTOP.

26. Использование обработчика сигналов для предотвращения появления процессов "зомби"

Процесс выполнил системный вызов exit(2) и перешел в состояние зомби (zombie, defunct). Как такового процесса не существует, но остаются записи, содержащие код возврата и временную статистику его

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

Наконец, процесс выполняет системный вызов exit(2) и заканчивает свое выполнение. Процесс может быть также завершен вследствие получения сигнала. В обоих случаях ядро освобождает ресурсы, принадлежавшие процессу, за исключением кода возврата и статистики его выполнения, и переводит процесс в состояние "зомби". В этом состоянии процесс находится до тех пор, пока родительский процесс не выполнит один из системных вызовов после чего вся информация о процессе будет уничтожена, а родитель получит код возврата завершившегося процесса.

27. Посылка сигналов процессам.

Послать сигнал процессу от другого процесса можно с помощью систем вызова:

Kill (pid, signum);

Pid – идентификатор процесса, который посылается сигналом.

Signum - номер сигнала.

Если pid – положительное целое число, то ядро посылает сигнал с идентификатором Pid.

Если pid=0, то сигнал посылается всем процессам, входящии в одну группу с процессом, который имеет kill()

Если pid – (-1), то сигнал посылается всем процессам одного пользователя.

Если pid – отрицательное число, но не (-1), то сигнал посылается всем процессам, входящим в группу с номером = абсолютному значению pid.

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