Списки доступа группы

 

Каждый процесс имеет до NGROUPS_MAX списков групп к которым он может принадлежать.

NGROUPS_MAX определено в /usr/include/limits.h, и обычно равняется 20. Процессу разрешается получать доступ к файлам с групповымим правами любой из списка групп. Списки доступа. Групповые права доступа контролируются командой chgrp.

 

Сессии

 

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

 

Процессы и терминальное взаимодействие.

 

Каждая сессия имеет управляющий терминал. Лидер сессии подключенный к управляющему терминалу называется еще контрольным процессом. Исключением являются процессы- демоны (cron, inetd, …) которые не имеют управляющего терминала. Все процессы принадлежащих к одной сессии используют управляющий терминал как стандартное устройство ввода, вывода и ошибок. В любой момент времени лишь одна группа процессов в сессии может находится не в фоновом выполнении и она имеет исключительные права на работу с управляющим терминалом.

 

Попытки чтения фоновой группой процессов

 

Если процесс из фоновой группы пытается читать из управляющего терминала, этой группе посылается сигнал SIGTTIN, который по умолчанию приостанавливает процесс. В любом случае системный вызов read() возвращает –1.

 

Попытки чтения фоновой группой процессов

 

Если процесс в фоновой группе пытается записать в управляющий терминал, группа процессов получает при этом сигнал SIGTTOU, который по умолчанию останавливает процесс.

 

Создание процессов

 

Один процесс может создать другой через:

 

           * паралельное выполнение другой программы

               

* выполнение другой программы с ожиданием ее окончания

 

На системном уровне процесс создается во время вызова системного вызова fork() или vfork().

 

Системный вызов fork()

 

Этот системный вызов создает новый процесс путем клонирования существующего. В старых реализациях HP-UX, система копировала полностью сегмент данных процесса, что негативно сказывалось на скорости и эффективности работы системы. Сейчас реализуется механизм известный как copy-on-write (на самом деле HP-UX реализует механизм copy-on-access), который позволяет использовать общие страницы памяти до момента записи.

 

Системный вызов vfork()

 

Приложения которым нужно создать независимый процесс могут делать это более эффективно если вместо fork() будут использовать vfork().Использование vfork оправдано только когда процесс потомок сразуже выполняет exec() или _exit() системные вызовы. При использовании vfork, потомок использует виртуальное адресное пространство родителя, поэтому оба процесса не могут работать одновременно. Процесс родитель при этом засыпает.

 

Системный вызов exec()

 

Очень часто после вызова fork() процесс запускает exec() на выполнение другой программы, при этом происходит перезапись сегмента кода и данных новым процессом.

 

Открытые файлы

 

При системных вызовах fork() и vfork() происходит наследование процессом потомков всех открытых файловых дискрипторов. Для системных параметра определяют ограничение на количество открытых файлов на процесс: maxfiles и maxfiles_lim. Параметр maxfiles определяет мягкий лимит как много открытых файлов может иметь процесс. Мягкий лимит наследуется после вызовов fork() vfork(). Параметр maxfiles_lim опреджеляет жесткий лимит на количество открытых файлов на один процесс. maxfiles должен быть меньше или равен maxfiles_lim. Мягкий лимит процесс наследует от своего родителя, который может быть уменьшен или увеличен до жесткого лимита (такое может сделать только процесс с правами администратора) с использованием системного вызова setrlimit().

 

Завершение процессов

                                              

Процесс завершается если:

 

           * Он успешно окончил свое выполнение

 

           * Процесс завершил.себя вызвав системный вызов exit()

 

           * Процесс получил сигнал на с фатальным действием

 

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

Команды управления процессами.

 

Управлять процессами можно либо с использованием команд HP-UX либо с использованием утилиты SAM. Наиболее часто используемые команды будут описаны ниже.

 

Команда ps (process status)

 

Команда ps показывает следующие параметры процессов:

 

           * идентификатор пользователя User ID

           * идентификатор процесса Process ID

           * идентификатор родительского процесса Parent process ID

           * командную строку породившую процесс

           * терминал с которого была запущена комманда

           * время (rela time CPU) которое было затрачено процессором на выполнение процесса.

 

Запущенная без опций она показывает process ID, terminal ID (tty), real CPU time usage, имя команды которую запустил на выполнение пользователь. С ключем –f ps также показывает имя пользователя, PPID, и время с момента когда процесс был fork-нут.

 

$ ps -f

UID PID PPID C STIME TTY TIME COMMAND

torry 3286 2016 9 16:19:03 ttyp1  0:00 ps -f

torry  25705 25649 0 08:47:58 ttyp1 0:02 -ksh /home/torry [ksh]

torry 2016  25705 0 15:13:02 ttyp1 0:24 vi processes.tag

 

Опция –e приводит к выдаче информации о всех активных процессах в системе. Опция -l (long) дополнительно показывает состояние процесса (S), параметр nice (NI), адрес процесса в памяти (ADDR), приоритет (PRI), и размер в блоках (SZ) образа процесса.

 

$ ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME COMD

1 R 513 11009 7793 5 179 20 d6e200 16     ttyu4 0:00 ps

1 S 0 7792 133 15 154 20 e06100 13 214fb0 ttyu4 0:00 rlogind

1 S 513 7793 7792 16 168 20 df5a80 52 7ffe6000 ttyu4 0:00 csh

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: