Рефераты. Оперциаонные системы ASP Linux и Windows

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

kill –l

Сигналы принято обозначать номерами или символическими именами. Все имена начинаются на SIG, но эту приставку иногда опускают: например, сигнал с номером 1 обозначают или как SIGHUP, или просто как HUP.

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

Можно заставить процесс игнорировать или блокировать некоторые сигналы. Игнорируемый сигнал просто отбрасывается процессом и не оказывает на него никакого влияния. Блокированный сигнал ставится в очередь на выдачу, но ядро не требует от процесса никаких действий до разблокирования сигнала. После разблокирования сигнала программа его обработки вызывается только один раз, даже если в течение периода блокировки данный сигнал поступал несколько раз.

В табл. 2.2.1. приведены некоторые из часто встречающихся сигналов.

 

Таблица 2.2.1. Сигналы

Имя

Описание

Можно перехватывать

Можно блокировать

Комбинация клавиш

1

HUP

Hangup. Отбой

Да

Да


2

INT

Interrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах — прекращение активного процесса

Да

Да

<Ctrl>+<C> или <Del>

3

QUIT

Как правило, сильнее сигнала Interru

Да

Да

<Ctrl>+<\>

4

ILL

Illegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблема

Да

Да


8

FPE

Floating Point Exception. Вычислительная ошибка, например, деление на ноль

Да

Да


9

KILL

Всегда прекращает выполнение процесса

Нет

Нет


11

SEGV

Segmentation Violation. Доступ к недозволенной области памяти

Да

Да


13

PIPE

Была предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данные

Да

Да


15

TERM

Software Termination. Требование закончить процесс (программное завершение)

Да

Да


17

CHLD

Изменение статуса порожденного процесса

Да

Да


18

CONT

Продолжение выполнения приостановленного процесса

Да

Да


20

TSTR

Сигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый

Да

Да

<Ctrl>+<Z>


Как видно из таблицы 2.2.1, некоторые сигналы можно сгенерировать с помощью определенных комбинаций клавиш. Но такие комбинации существуют не для всех сигналов. Зато имеется команда kill, которая позволяет послать заданному процессу любой сигнал.

Для посылки сигнала процессу (или группе процессов) можно воспользоваться командой kill в следующем формате:

kill [-сигн] PID [PID..]

где сигн — это номер сигнала, причем если указание сигнала опущено, то посылается сигнал 15 (TERM — программное завершение процесса). Чаще всего используется сигнал 9 (KILL), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко".

Наиболее часто команду kill вынужден применять суперпользователь. Он должен использовать ее для уничтожения процессов-зомби, зависших процессов (они показываются в листинге команды ps как <exiting>), процессов, которые занимают слишком много процессорного времени или слишком большой объем памяти и т. д. Особый случай — процессы, запущенные злоумышленником.

Перевод процесса в фоновый режим

Если вы запускаете какой-то процесс путем запуска программы из командной строки, то обычно процесс запускается, как говорят, "на переднем плане". Это значит, что процесс "привязывается" к терминалу, с которого он запущен, воспринимая ввод с этого терминала и осуществляя на него вывод. Но можно запустить процесс в фоновом режиме, когда он не связан с терминалом. Для запуска процесса в фоновом режиме в конце командной строки запуска программы добавляют символ & (амперсанд).

Например, в фоновом режиме запускается процесс cc prog.c:

$ cc prog.c &

2388

$

Shell выводит номер этого процесса (PID) и разрешает  ввод следующей команды.

Фоновые процессы обладают некоторыми недостатками:

-                                           не допускают ввода с клавиатуры;

-                                           обспечивают  вывод  на  экран, но при этом нарушают целостность вывода диалогового процесса.

Общепринятый прием исключения влияния фонового вывода на интерактивную работу:

ком_строка>имя_файла.out &

-                                           ком_строка планирует задание для фонового режима

-                                           перенаправляет вывод вместо экрана в указанный файл головного каталога пользователя.

Пример: Запуск программы, осуществляющей поиск файлов по шаблону «ааа*», в фоновом режиме,  результаты поиска перенаправляются в файл grep.out:

$grep ааа* > grep.out &

194

$ps

PID            TTY           TIME             CMD

194           tty5              0:02                grep

 200           tty5              0:01                ps

В оболочке bash имеются две встроенные команды, которые служат для перевода процессов на передний план или возврата их в фоновый режим. Но прежде, чем рассказывать об этих командах, надо рассказать о команде jobs. Она всегда вызывается без аргументов и показывает задания, запущенные из текущего экземпляра shell. В начале каждой строки вывода этой команды указывается порядковый номер задания в виде числа в квадратных скобках. После номера указывается состояние процесса: stopped (остановлен), running (выполняется) или suspended (приостановлен). В конце строки указывается команда, которая исполняется данным процессом. Один из номеров выполняющихся заданий помечен знаком +, а еще один — знаком -. Процесс, помеченный знаком +, будет по умолчанию считаться аргументом команд fg или bg, если они вызываются без параметров. Процесс, помеченный знаком -, получит знак +, если только завершится по какой-либо причине процесс, который был помечен знаком +.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.