Сигналы Системные вызовы и библиотеки Unix SVR4. ЦЕЛИ РАЗДЕЛА Описать сигналы и причины их возникновения Научить обрабатывать сигналы, когда они возникают.

Презентация:



Advertisements
Похожие презентации
Асинхронный ввод/вывод Системные вызовы и библиотеки Unix SVR4 Иртегов Д.В. ФФ/ФИТ НГУ Электронный лекционный курс подготовлен в рамках реализации Программы.
Advertisements

Лекция 3. Исключения и прерывания в встроенных системах.
Реализация взаимодействия процессов. Взаимодействие процессов взаимодействие в рамках локальной ЭВМ (одной ОС) взаимодействие в рамках сети родственные.
Реализация взаимодействия процессов. Взаимодействие процессов взаимодействие в рамках локальной ЭВМ (одной ОС) взаимодействие в рамках сети родственные.
Управление процессами. Определение процесса. Основные понятия Процесс совокупность машинных команд и данных, которая исполняется в рамках вычислительной.
Средства System V IPC Системные вызовы и библиотеки Unix SVR4.
Инструкции сравнения. Особенности инструкции LIM Low LimHigh Lim Истина Ложь Low Lim < High Lim Low LimHigh Lim ИстинаЛожьLow.
Управление процессами. Определение процесса. Основные понятия Процесс совокупность машинных команд и данных, которая обрабатывается в рамках вычислительной.
ЗАХВАТ ФАЙЛОВ И ЗАПИСЕЙ Системные вызовы и библиотеки Unix SVR4.
Реализация взаимодействия процессов. Взаимодействие процессов взаимодействие в рамках локальной ЭВМ (одной ОС) взаимодействие в рамках сети родственные.
СИСТЕМНЫЕ ВЫЗОВЫ ВВОДА И ВЫВОДА Системные вызовы и библиотеки Unix SVR4.
Встроенные Системы Часть 3. Прерывания Кафедра Информатики, мат-мех СПбГУ Copyright © 2004 Victor Vengerov
ЗАХВАТ ФАЙЛОВ И ЗАПИСЕЙ Системные вызовы и библиотеки Unix SVR4 Иртегов Д.В. ФФ/ФИТ НГУ Электронный лекционный курс подготовлен в рамках реализации Программы.
Процессы и потоки. Процессы В общем представлении, процесс - это программа, выполняющаяся в оперативной памяти компьютера. Реально, все гораздо сложней.
Учебный курс Основы операционных систем Лекция 2 кандидат физико-математических наук, доцент Карпов Владимир Ефимович.
Петрозаводский госуниверситет, А. В. Соловьев, 2007СЕТЕВЫЕ ТЕХНОЛОГИИ Состояния процесса в МОС Rev / RUN READY WAIT 1 2 Пользовательская.
Лекция 4. Режимы работы микропроцессора. Взаимодействие микропроцессора с остальными устройствами Взаимодействие МП с остальными устройствами МПС происходит.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Прерывания Определение прерывания Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств.
Системные механизмы Windows. Системные механизмы диспетчеризация ловушек, в т.ч. прерываний, DPC (deferred procedure call), APC (asynchronous procedure.
Транксрипт:

Сигналы Системные вызовы и библиотеки Unix SVR4

ЦЕЛИ РАЗДЕЛА Описать сигналы и причины их возникновения Научить обрабатывать сигналы, когда они возникают Описать воздействие сигналов на различные системные вызовы.

СИГНАЛЫ могут быть посланы одним процессом другому процессу могут быть посланы от ядра к процессу сообщают о внешнем событии или ошибке обрабатываются получающим процессом

ТИПЫ СИГНАЛОВ сигналреакциясобытие SIGHUPexitобрыв линии (см. termio(7)) SIGINTexitпрерывание (см. termio(7)) SIGQUITcoreзавершение (см. termio(7)) SIGILLcoreнеправильная инструкция SIGTRAPcoreпрерывание трассировки SIGABORT coreаборт SIGEMTcoreкоманда EMT (программное прерывание) SIGFPEcoreарифметическая особая ситуация SIGKILLexitпринудительное завершение ("убийство") SIGBUScoreошибка шины SIGSEGVcoreнарушение сегментации SIGPIPEexitразрыв конвейера

ТИПЫ СИГНАЛОВ SIGALRMexitбудильник SIGTERMexitпрограммный сигнал прерывания от kill SIGCLDignoreизменение состояния подпроцесса SIGPWRignoreсбой питания SIGSTOPstopостановка (сигналом) SIGTSTPstopостановка (пользователем) (см. termio(7)) SIGCONTignoreпродолжение SIGTTINstopожидание ввода с терминала(см. termio(7)) SIGTTOUstop ожидание вывода на терминал (см.termio(7)) SIGVTALRM exitсигнал виртуального таймера SIGPROFexitсигнал таймера профилирования SIGXCPUcoreисчерпался лимит времени (см. getrlimit(2)) SIGXFSZcore выход за пределы длины файла (см. getrlimit(2))

ПОЛУЧЕНИЕ СИГНАЛА получающим процессом выполняются действия по обработке сигнала возможные реакции: –SIG_DFL - реакция по умолчанию –SIG_IGN - проигнорировать сигнал –адрес функции - перехватить сигнал

Signal(2) ИСПОЛЬЗОВАНИЕ #include void (*signal (int sig, void (*disp)(int))) (int); void (*sigset (int sig, void (*disp)(int))) (int); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ signal успех - предыдущая реакция на сигнал неуспех - SIG_ERR и errno установлена sigset успех - SIG_HOLD если сигнал заблокирован, иначе предыдущая реакция на этот сигнал неуспех - SIG_ERR и errno установлена

Signal(2) ИСПОЛЬЗОВАНИЕ #include typedef void (*handler_t)(int) handler_t signal (int sig, handler_t handler); handler_t sigset (int sig, handler_t handler); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ signal успех - предыдущая реакция на сигнал неуспех - SIG_ERR и errno установлена sigset успех - SIG_HOLD если сигнал заблокирован, иначе предыдущая реакция на этот сигнал неуспех - SIG_ERR и errno установлена

signal и sigset Обработчик, установленный через signal(2), сбрасывает реакцию на сигнал на SIG_DFL Обработчик, установленный через sigset(2), блокирует сигнал на время своей работы, и разблокирует после возврата

Signal(2) - продолжение ИСПОЛЬЗОВАНИЕ #include int sigrelse(int sig); int sigignore(int sig); int sigpause(int sig); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлено

ГЕНЕРАЦИЯ СИГНАЛОВ из пользовательских программ –kill (2) –sigsend(2) –alarm(2) из ядра –от клавиатуры –от ошибок программирования

kill(2) ИСПОЛЬЗОВАНИЕ #include int kill (pid_t pid, int sig); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

sigsend(2) ИСПОЛЬЗОВАНИЕ #include int sigsend (idtype_t idtype, id_t id, int sig); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена.

Id_type idtypeПолучающий процесс (процессы) P_PIDпроцесс, чей PID равен id P_PGIDвсе процессы, чей pgif равен id P_SIDвсе процессы, чей ID сессии равен id P_UIDвсе процессы, чей EUID равен id P_GIDвсе процессы, чей EGID равен id P_CIDвсе процессы, чей класс планирования равен id[см. priocntl(2)] P_ALLвсе процессы, id игнорируется P_MYIDвызывающий процесс

alarm(2) ИСПОЛЬЗОВАНИЕ #include unsigned alarm (unsigned sec); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ время, оставшееся до сигнала

setjmp(3C) ИСПОЛЬЗОВАНИЕ #include int setjmp (jmp_buf env); void longjmp (jmp_buf env, int val); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ setjmp(3) возвращает 0, когда встречается в выполняемой последовательности кодов setjmp(3) возвращает ненулевое значение, если вызов longjmp(3) привел к переходу к месту вызова setjmp(3)

pause(2) ИСПОЛЬЗОВАНИЕ #include int pause (void); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ -1 и errno установлена

mysleep static jmp_buf env; mysleep(int seconds) { void sigcatch(int), (*astat)(int); int unslept = seconds; astat = signal(SIGALRM, sigcatch); if (setjmp(env) == 0) { alarm(seconds); pause(); } unslept = alarm(0); signal(SIGALRM, astat); return(unslept); } static void sigcatch(int sig) { longjmp(env, 1); }

Sleep(3C) ИМЯ sleep - задержать исполнение на заданный интервал времени ИСПОЛЬЗОВАНИЕ #include unsigned sleep (unsigned seconds); ОПИСАНИЕ Не оказывает воздействия на обработку или доставку ни одного сигнала. Безопасно для использования в многопоточной программе. ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ оставшееся "недоспанное" время

sigsetops(3C) ИСПОЛЬЗОВАНИЕ #include int sigemptyset(sigset_t * set); int sigfillset(sigset_t * set); int sigaddset(sigset_t * set, int signo); int sigdelset(sigset_t * set, int signo); int sigismember(sigset_t * set, int signo); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - sigismember: 1 если истинно, 0 если ложно; остальные функции: 0 неуспех - -1 и errno установлена

sigpending(2) ИСПОЛЬЗОВАНИЕ #include int sigpending(sigset_t * set);

sigprocmask(2) ИСПОЛЬЗОВАНИЕ #include int sigprocmask(int how, sigset_t *set,sigset_t *oset); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

sigprocmask how SIG_BLOCK - Множество сигналов, на которое указывает set, будет добавлено к текущей маске сигнала. SIG_UNBLOCK - Множество set будет удалено из текущей маски. SIG_SETMASK - Текущая маска будет заменена на set.

sigaction(2) ИСПОЛЬЗОВАНИЕ #include int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

struct sigaction void (*sa_handler)(); - Адрес функции обработки сигнала, SIG_IGN или SIG_DFL sigset_t sa_mask - Маска сигналов, которые должны быть заблокированы, когда вызывается функция обработки сигнала. int sa_flags - Флаги, управляющие доставкой сигнала.

sa_flags A_ONSTACK - Используется для обработки сигналов на альтернативном сигнальном стеке. SA_RESETHAND - Во время исполнения функции обработки сбрасывает реакцию на сигнал к SIG_DFL; обрабатываемый сигнал при этом не блокируется. SA_NODEFER - Во время обработки сигнала сигнал не блокируется. SA_RESTART - Системные вызовы, которые будут прерваны исполнением функции обработки, автоматически перезапускаются. SA_SIGINFO - Используется для доступа к подробной информации о процессе, исполняющем сигнальный обработчик, такой как причина возникновения сигнала и контекст процесса в момент доставки сигнала. SA_NOCLDWAIT - Подавляет создание процессов-зомби. SA_NOCLDSTOP - Подавляет генерацию SIGCHLD, когда порожденные процессы останавливаются или возобновляются.

СИГНАЛЫ ДЛЯ УПРАВЛЕНИЯ ЗАДАНИЯМИ ИмяЗначениеУмолчание Событие SIGSTOP 23 StopОстановка (сигналом) SIGTSTP 24 StopОстановка (пользователем) SIGCONT 25 IgnoreПродолжение исполнения SIGTTIN 26 StopОстановка при вводе с терминала SIGTTOU 27 StopОстановка при выводе на терминал