Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СистПриклПрогЗабез(Хихловская).doc
Скачиваний:
25
Добавлен:
10.02.2016
Размер:
961.02 Кб
Скачать

Реальный (rgid) и эффективный (egid) идентификаторы группы

RGIDравен идентификатору первичной ил текущей группы пользователя, запустившего процесс.EGIDслужит для определения прав доступа к системным ресурсам по классу доступа группы. Возможна установкаEGIDравным идентификатору группы владельца исполняемого файла ( флагSGID).

Жизненный путь процесса

Процесс в UNIXсоздаетсясистемным вызовом fork(2).Процесс, сделавший вызовfork(2), называется родительским, а вновь созданный процесс – дочерним. Новый процесс имеет те же инструкции и данные, что и его родитель. Выполнение родительского и дочернего процесса начнется с одной и той же инструкции, следующей за вызовомfork(2). Отличаются они толькоPID.Для запуска новой программы процесс должен выполнить системный вызовexec(2). При этом новый процесс не порождается, а исполняемый код дочернего процесса полностью замещается кодом запускаемой программы. Окружение же новой программы во многом сохраняется, в частности сохраняются значения переменных окружения, назначения стандартных потоков ввода/вывода, вывода сообщений об ошибках и приоритет процесса. Запуск на выполнение новой программы часто связан с порождением нового процесса, таким образом, сначала процесс выполняет вызовfork(2), порождая дочерний процесс, который затем выполняетexec(2), полностью замещаясь новой программой. Пусть пользователь, работая в командном интерпретатореshell,запускает ls(1). Текущий процесс (shell) делает вызовfork(2), порождая вторую копию shell. Порожденныйshellвызываетexec(2), указывая в качестве параметра имя исполняемого файла, образ которого необходимо загрузить в память вместо кодаshell. Кодls(1) размещает код порожденногоshell, и утилитаls(1) начинает выполняться. По завершении работыls(1) созданный процесс “умирает”. Пользователь вновь возвращается в командный режим

$ ps(1) –ef / head –20

UID PID PPID C CMD

1 user1 745 1 10shпользователь работает в командном режиме

2 user 1 745 1 10 sh

3 user 1 802 745 14 sh

4 user 1 745 1 10 sh

5 user1 802 745 12ls

6 user1 745 1 10sh

Процедура запуска новой программы называется fork-and-exec. Бывают ситуации, когда достаточно одного вызоваfork(2) без последующегоexec(2). В этом случае исполняемый код родительского процесса должен содержать логическое ветвление для родительского и дочернего процессов. Прародителем всех процессов является процессinit(1M), который также называемый распределителем процессов. init(1M) – это демон, неинтерактивная программа обеспечивающая доступ по сети, печать, электронная почта, возможность терминального входа.

Сигналы

Сигналы являются способом передачи от одного процесса к другому или от ядра ОС к процессу уведомления о возникновении определенного события. Сигналы рассматриваются как простейшая форма межпроцессорного взаимодействия. Сигналы похожи на программные прерывания, когда нормальное выполнение процесса прерывается. Например, если процесс производит деление на 0, ядро посылает ему сигнал SIGFPE; при нажатии клавиш прерывания - <Del> или <Ctrl>+<C>,текущему процессу посылается сигналSIGINT.

Для отправления сигнала служит команда kill(1):

killsig_nopid,

Где sig_no– номер или символическое название сигнала, аpid– идентификатор процесса, которому посылается сигнал. Администратор системы может посылать сигналы любым процессам, обычный же пользователь может посылать сигналы только процесса, владельцем которых он является.PIDиEUIDпроцесса, посылающего сигнал, должны совпадать с идентификатором пользователя. Например, процессу, который только что запустили в фоновом режиме, нужно послать сигнал завершения выполненияSIGTERM; для этого нужно:

$ long_program& Запуск программы в фоновом режиме

$ kill$! По умолчанию командаkill(1) посылает сигналSIGTERM; переменная $! СодержитPIDпоследнего процеса, запущенного в фоновом режиме

При получении сигнала процесс имеет три варианта действий для выбора:

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

  2. Процесс может потребовать действия по умолчанию, это сводится к завершению выполнения процесса.

  3. Процесс может перехватить сигнал и самостоятельно обработать его, т.е. например, перехват сигнала SIGINTпозволит процессу удалить созданные или временные файлы. СигналыSIGKILL и SIGSTOP нельзя ни перехватить, ни игнорировать.

По умолчанию команда kill(1) посылает сигнал с номером 15 –SIGTERM– завершение выполнения процесса, получившего сигнал. Иногда процесс продолжает существовать и после отправления сигналаSIGTERM. В этом случае можно применить более жесткое средство – послать сигналуSIGKILLс номером (9), т.к. этот сигнал нельзя ни перехватить, ни игнорировать:

$kill– 9pid

Иногда процесс не исчезает и в этом случае:

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

  2. Процессы, ожидающие недоступные ресурсыNFS(NetworkFileSystem), например, записывающие данные в файл файловой системы в ПК удаленного доступа, отключенного от сети.

  3. Процессы, ожидающие завершение операции с устройством.

Сигналы могут использоваться не только для завершения, но и для, например, считывания базы данных с сервера: SIGHUPпосылается серверуDNS(named(1M)).