Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 210 211 212 213 214 215 216 217 218 ... 324
Общая сводка сигналов

В этом разделе мы перечисляем сигналы, в которых нуждаются программы 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 вполне способна выполнять множественные процессы одновременно. В действительности у всех процессов есть как минимум один поток исполнения. У всех процессов, с которыми вы пока познакомились в этой книге, был только один поток исполнения.

1 ... 210 211 212 213 214 215 216 217 218 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий