Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Функции, которые безопасно вызываются в обработчике сигнала и в стандарте X/Open гарантированно описанные либо как реентерабельные, либо как самостоятельно не возбуждающие сигналов, перечислены в табл. 11.6.

Все функции, не включенные в табл. 11.6, следует считать небезопасными в том, что касается сигналов.

Таблица 11.6

access
alarm
cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed
chdir
chmod
chown
close
creat
dup2
dup
execle
execve
exit
fcntl
fork
fstat
getegid
geteuid
getgid
getgroups
getpgrp
getpid
getppid
getuid
kill
link
lseek
mkdir
mkfifo
open
pathconf
pause
pipe
read
rename
rmdir
setgid
setpgid
setsid
setuid
sigaction
sigaddset
sigdelset
sigemptyset
sigfillset
sigismember
signal
sigpending
sigprocmask
sigsuspend
sleep
stat
sysconf
tcdrain
tcflow
tcflush
tcgetattr
tcgetpgrp
tcsendbreak
tcsetattr
tcsetpgrp
time
times
umask
uname
unlink
utime
wait
waitpid
write
     
Общая сводка сигналов

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

Стандартное действие для сигналов, перечисленных в табл. 11.7, — аварийное завершение процесса со всеми последствиями вызова функции

_exit
(которая похожа на
exit
, но не выполняет никакой очистки перед возвратом управления ядру). Тем не менее, состояние становится доступным функции
wait
, а функция
waitpid
указывает на аварийное завершение, вызванное описанным сигналом.

Таблица 11.7

Имя сигнала Описание
SIGALRM
Генерируется таймером, установленным функцией
alarm
SIGHUP
Посылается управляющему процессу отключающимся терминалом или управляющим процессом во время завершения каждому процессу с высоким приоритетом
SIGINT
Обычно возбуждается с терминала при нажатии комбинации клавиш <Ctrl>+<C> или сконфигурированного символа прерывания
SIGKILL
Обычно используется из командной оболочки для принудительного завершения процесса с ошибкой, т.к. этот сигнал не может быть перехвачен или проигнорирован
SIGPIPE
Генерируется при попытке записи в канал при отсутствии связанного с ним считывателя
SIGTERM
Отправляется процессу как требование завершиться. Применяется UNIX при выключении для запроса остановки системных сервисов. Это сигнал, по умолчанию посылаемый командой
kill
SIGUSR1
,
SIGUSR2
Может использоваться процессами для взаимодействия друг с другом, возможно, чтобы заставить их сообщить информацию о состоянии

По умолчанию сигналы, перечисленные в табл. 11.8, также вызывают преждевременное завершение. Кроме того, могут выполняться действия, зависящие от реализации, например, создание файла core.

Таблица 11.8

Имя сигнала Описание
SIGFPE
Генерируется исключительной ситуацией во время операций с плавающей точкой
SIGILL
Процессор выполнил недопустимую команду. Обычно возбуждается испорченной программой или некорректным модулем совместно используемой памяти
SIGQUIT
Обычно возбуждается с терминала при нажатии комбинации клавиш <Ctrl>+<\> или сконфигурированного символа завершения (quit)
SIGSEGV
Нарушение сегментации, обычно возбуждается при чтении из некорректного участка памяти или записи в него, а также выход за границы массива или разыменование неверного указателя. Перезапись локального массива и повреждение стека могут вызвать сигнал
SIGSEGV
при возврате функции по неверному адресу

При получении одного из сигналов, приведенных в табл. 11.9, по умолчанию процесс приостанавливается.

Таблица 11.9

Имя сигнала Описание
SIGSTOP
Останавливает выполнение (не может быть захвачен или проигнорирован)
SIGTSTP
Сигнал останова терминала часто возбуждается нажатием комбинации клавиш <Ctrl>+<Z>
SIGTTIN
,
SIGTTOU
Применяются командной оболочкой для обозначения того, что фоновые задания остановлены, т.к. им необходимо прочесть данные с терминала или выполнить вывод

Сигнал

SIGCONT
возобновляет остановленный процесс и игнорируется при получении неостановленным процессом. Сигнал
SIGCHLD
по умолчанию игнорируется (табл. 11.10).

Таблица 11.10

Имя сигнала Описание
SIGCONT
Продолжает выполнение, если процесс остановлен
SIGCHLD
Возбуждается, когда останавливается или завершается дочерний процесс

Резюме 

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

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

Глава 12

Потоки POSIX

В главе 11 вы видели, как обрабатываются процессы в ОС Linux (и конечно в UNIX). Эти средства обработки множественных процессов долгое время были характерной чертой UNIX-подобных операционных систем. Порой бывает полезно заставить одну программу делать два дела одновременно или, по крайней мере, создать впечатление такой работы. А может быть, вы хотите, чтобы несколько событий произошло одновременно и все они были тесно связаны, но при этом накладные расходы на создание нового процесса с помощью функции

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

В этой главе мы рассмотрим следующие темы:

 создание новых потоков в процессе;

 синхронизацию доступа к данным потоков одного процесса;

 изменение атрибутов потока;

 управление в одном и том же процессе одним потоком из другого.

Что такое поток?

Множественные нити исполнения в одной программе называют потоками. Более точно поток — это последовательность или цикл управления в процессе. Все программы, которые вы видели до настоящего момента, выполняли единственный процесс, хотя, как и многие другие операционные системы, ОС Linux вполне способна выполнять множественные процессы одновременно. В действительности у всех процессов есть как минимум один поток исполнения. У всех процессов, с которыми вы пока познакомились в этой книге, был только один поток исполнения.

Важно понять разницу между системным вызовом fork и созданием новых потоков. Когда процесс выполняет системный вызов fork, создается новая копия процесса с ее собственными переменными и собственным PID. Время выполнения этого нового процесса планируется независимо и выполняется он (в основном) независимо от создавшего его процесса. Когда мы создаем в процессе новый поток, этот поток исполнения в противоположность новому процессу получает собственный стек (и, следовательно, локальные переменные), но использует совместно с создавшим его процессом глобальные переменные, файловые дескрипторы, обработчики сигналов и положение текущего каталога.

Поделиться:
Популярные книги

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Четники. Королевская армия

Тимофеев Алексей Юрьевич
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Четники. Королевская армия

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2

Бастард Императора. Том 16

Орлов Андрей Юрьевич
16. Бастард Императора
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 16

Оранжерейный цветок

Ритчи Криста
2. Сёстры Кэллоуэй
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Оранжерейный цветок

Встреча

Видум Инди
7. Петя и Валерон
Фантастика:
рпг
аниме
попаданцы
5.00
рейтинг книги
Встреча

Кодекс Охотника. Книга XXVI

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Родословная. Том 5

Ткачев Андрей Юрьевич
5. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 5

1941: Время кровавых псов

Золотько Александр Карлович
1. Всеволод Залесский
Приключения:
исторические приключения
6.36
рейтинг книги
1941: Время кровавых псов