Тема: Сигналы. Действия сигналов. Стандартные сигналы. Обработчики сигналов. — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Тема: Сигналы. Действия сигналов. Стандартные сигналы. Обработчики сигналов.

2017-11-16 209
Тема: Сигналы. Действия сигналов. Стандартные сигналы. Обработчики сигналов. 0.00 из 5.00 0 оценок
Заказать работу

Цель работы: овладеть навыками использования сигналов для обмена информацией между процессами.

Теоретические сведения:

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

· ошибка при выполнении операций с плавающей запятой;

· отказ питания;

· сигнал таймера;

· смерть дочернего процесса;

· прерывание от клавиатуры по <ctrl+d> и т.п.

Эти виды событий, иногда называют прерываниями. Когда ОС распознаёт, что сложилась такая ситуация, то она должна соответствующим образом отреагировать, а именно послать соответствующему процессу сигнал. Ядро на самом деле не единственный источник, который может послать сигнал. Любой процесс способен отправить сигнал произвольному процессу, когда он имеет право на это. Используя специальную часть кода, которую называют обработчиком сигнала, программист может принять меры, чтобы конкретный сигнал был проигнорирован или обработан.

Примеры программ с использованием сигналов.

Текст программы pulse.c:

'$cat pulse'

# include <stdio.h>

# include <signal.h>

main()

{int pid1, pid2;

pid1= fork();

{

while(1)

{printf("Pid1 is alive\n");

sleep(1);}

pid2=fork();

{while(1)

{iprintf ("Pid2 is alive\n");

sleep(1);

}

}

sleep(3);

kill(3);

kill(pid1, SIGSTOP);

sleep(3);

kill(pid1, SIGCONT);

sleep(3);

kill(pid1, SIGINT);

kill(pid2, SIGINT);

}

Выполнение программы pulse.c:

Pid1 is alive

Pid2 is alive

Pid1 is alive

Pid2 is alive

Pid1 is alive

Pid2 is alive

Pid2 is alive

Pid2 is alive

Pid2 is alive

Pid1 is alive

Pid1 is alive

Pid2 is alive

Pid1 is alive

Pid2 is alive

Описание работы программы pulse.c:

В программе создается новый пользовательский процесс, которому присваивается его PID (идентификатор порождаемого процесса), далее выполняется цикл while, в котором происходит написание фразы и засыпание (sleep()). Затем выполняется создание еще одного пользовательского процесса и для него выполняется такой же цикл, что и для предыдущего созданного процесса. Далее происходит остановка и восстановление сигналов, которые обеспечивают выполнение [циклов, определенных для каждого процесса.

SIGCONT - восстановление сигнала

kill(<адрес посылаемого сигнала>,<номер посылаемого сигнала>) - послать сигнал SIGINT - инициализация сигнального прерывания

Лабораторная работа №4

Тема: Сигналы POSIX.

Цель работы: овладеть навыками использования стандартных сигналов.

Теоретические сведения.

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

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

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

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

Если процесс находится в состоянии "добровольного" приостанова (вызванного, например, выполнением системного вызова 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);

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

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

При нормальном завершении вызов возвращает адрес старого обработчика данного сигнала, при ненормальном - ошибку SIG_ERR

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

 

Kill (2)

посылка сигнала процессу

Синтаксис

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig);

Описание

kill посылает заданному процессу определенный сигнал

Параметры

pid Если pid > 0, то он задает PID процесса, которому посылается сигнал.

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

Если pid < 0, то сигнал посылается всем процессам группы, идентификатор которой равен -pid.

sig Тип посылаемого сигнала (см. signal ()).

 

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

При нормальном выполнении функция возвращает 0. При ошибках выполнения возвращает -1 и устанавливает errno ().

 

Raise ()

посылка сигнала текущему процессу

Синтаксис

#include <signal.h>

int raise (int sig);

Описание

raise посылает сигнал текущему процессу. Вызов:

raise(s);

эквивалентен вызову:

kill(getpid(),s);

Параметры

sig - тип сигнала (см.signal ()).

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

0 - при нормальном завершении, -1 - при ненормальном, в последнем случае устанавливается значение errno.


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.021 с.