Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Исследуем процесс загрузки Linux

(C) В.А.Костромин, 2007
(версия файла от 20.08.2007 г.)


Назад Оглавление Вперед

Этап 8: Запуск процессов getty и login

Теперь давайте вспомним содержание раздела 5 настоящих заметок, где было рассказано, в каком порядке процесс init выполняет инструкции из файла /etc/inittab и приведен пример такого файла. Обратите внимание на то, что строки, в которых объявляется вызов скрипта rc помечены ключевым словом wait в третьем поле (поле action). Это означает, что init будет дожидаться, пока не завершиться выполнение скрипта rc, не предпринимая других действий.

Когда выполнение rc N завершится, init будет выполнять команды, заданные в строках с ключевым словом respawn для заданного уровня выполнения. Программы, запущенные с условием respawn будут повторно запускаться после завершения.

Например, в Red Hat для пятого уровня выполнения в файле /etc/inittab обычно прописаны следующие строки:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon

Первые 6 из этих строк обеспечивают запуск шести виртуальных консолей, доступ к которым (или переключение между которыми) пользователь Linux получает с помощью комбинаций клавиш ALT-F1 .... ALT-F6. Для этого init порождает процессы, именуемые getty-процессами (от "get tty" — получить терминал), и следит за тем, какой из процессов открывает какой терминал. Каждый getty-процесс устанавливает свою группу процессов, используя вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом.

Когда функция open возвращает управление, getty-процесс (демон getty) отображает на экране содержимое файла etc/issue и запускает программу login (регистрации в системе), которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля.

Если пользователь не смог успешно зарегистрироваться, программа регистрации через определенный промежуток времени завершается, закрывая открытую терминальную линию, а процесс init порождает для этой линии следующий getty-процесс, открывающий терминал, вместо прекратившего существование (помните - ключевое слово respawn).

Последняя строка в приведенном выше примере, обозначенная идентификатором x, задает регистрацию пользователя в графическом режиме. Заметьте, что эта строка работает только на 5-ом уровне выполнения, поскольку другие уровни в Red Hat не предполагают использования графики. Но рассмотрение варианта загрузки в графическом режиме мы отложим до отдельного раздела настоящих заметок (или, скорее, отдельного приложения).

Как уже отмечалось где-то выше, вовсе не обязательно открывать 6 терминальных линий. Большинству пользователей более чем достаточно трех таких виртуальных терминалов. Тем более, надо иметь в виду, что запуск каждого лишнего процесса - это расходование системных ресурсов, в первую очередь - памяти. Чтобы сократить число открываемых терминальных линий, достаточно закомментировать "лишние" строки в файле /etc/inittab, как это было показано в листниге 10.


Назад Оглавление Вперед