[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Взаимодействие процессов

Каждый  процесс   имеет  родительский   процесс  (процесс  0  является
собственным родителем).
.  Процесс 1  -  /sbin/init  процесс  порождающий  другие.  Он  читает
   командный файл  /etc/inittab (см. INITTAB(4))  и порождает процессы
   (используя fork(2)  и exec(2)).  inittab определяет, какие процессы
   должны быть  порождены на  конкретном уровне  запуска  системы.  Он
   обычно  содержит   /etc/rc2,  который   исполняется  до  того,  как
   пользователям будет  позволено входить  в систему.  rc2  указывает,
   какие файловые системы должны монтироваться и какие процессы-демоны
   (daemon)  должны   быть  запущены,   например,  планировщик  работы
   принтера. init порождает sac и ttymon для консоли.
.  /usr/lib/saf/sac - контроллер доступа к сервису. Он стартует, когда
   машина переводится  в многопользовательский  режим. Одна из функций
   sac  -   чтение  командного   файла   /etc/saf/_sactab   и   запуск
   определенных в  нем программ управления портами (ttymon). Далее sac
   опрашивает эти программы на предмет обнаружение ошибок.
.  /usr/lib/saf/ttymon   определяет    активность   линии   и   выдает
   приглашение входа  в систему. ttymon пытается работать на начальном
   уровне скорости. Если пользователь нажимает клавишу <BREAK>, ttymon
   пытается использовать  следующую  скорость  из  последовательности,
   определенной в файле /etc/ttydefs (см. TTYDEFS(4)). После ответа на
   приглашение входа  в систему,  ttymon  запускает  /bin/login.  Даже
   после входа  пользователя в систему владельцем процесса ttymon, по-
   прежнему, остается root. Он был запущен не с вашего терминала и для
   определения  его статуса используйте ps -e.
.  login проверяет  регистрационное имя пользователя и его пароль. При
   успешной проверке,  login запускает  поверх себя  (overlays itself)
   командный интерпретатор  shell (по умолчанию /bin/sh), определенный
   в файле  passwd. login  производит установку  следующих  переменных
   среды исполнения:
   HOME=шестое поле в файле паролей
   LOGNAME=регистрационное имя пользователя
   MAIL=/var/mail/регистрационное имя пользователя
   PATH=/usr/bin
   SHELL=седьмое поле файла паролей (установка происходит, только если
   7-ое поле не равно нулю)
.  После того  как login запускает поверх себя shell, то shell сначала
   читает  команды   из  файла   /etc/profile,  а   затем   из   файла
   $HOME/.profile, если  этот  файл  существует.  Затем  shell  выдает
   приглашение.
.  Shell интерпретирует  команды  пользователей  и  выполняет  их  как
   порожденные процессы.

Обычно запущенные  с пользовательского терминала процессы, принадлежат
одной  и   той  же  сессии  (session).  Процессы  одной  сессии  могут
принадлежать разным  группам процессов.  Процесс может  создать  новую
группу  процессов   (став  лидером   группы),  вызвав   setsid(2)  или
setpgid(2).   Порожденные процессы наследуют от родительского процесса
идентификаторы   группы процессов  и сессии. Один из процессов сессии,
управляемый с  терминала (который  называется управляющим терминалом),
принадлежит группе  основных  (foreground)  процессов.    Процессы  из
группы основных  процессов принимают сигналы, генерируемые клавиатурой
(например, SIGINT  и SIGQUIT).  Группы процессов  и сессии  важны  для
управлениями заданиями и обработки сигналов.

В силу  особенностей управления  заданиями, ksh  создает новую  группу
процессов для  каждой запускаемой  команды. Иллюстрация  на  следующей
странице показывает четыре группы процессов. progc  принадлежит группе
основных процессов.  pgrpldr порождает два подпроцесса и они наследуют
идентификатор группы  процессов от  своего  родителя.  ksh  использует
группы процессов  для управления  заданиями.  Исполнение  процесса  из
группы основных  процессов может  быть остановлено вводом стоп-символа
(<CTRL  z>  по  умолчанию).  Потом  ksh  становится  группой  основных
процессов. Любые  другие группы процессов могут стать основной группой
с помощью команды fg.

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