Главная страница

Лекция 1 - Среда исполнения. Среда исполнения введение


Скачать 155.5 Kb.
НазваниеСреда исполнения введение
Дата24.03.2022
Размер155.5 Kb.
Формат файлаdoc
Имя файлаЛекция 1 - Среда исполнения.doc
ТипПрограмма
#412377
страница4 из 7
1   2   3   4   5   6   7

Взаимодействие процессов (продолжение)


Графический вход в систему происходит аналогично тому, как вход через терминал, только роль ttymon и login играет программа X Display Manager или, в Solaris 10/11, Gnome Display Manager — gdm(1M). Эта программа обслуживает вход в систему как с локальных дисплеев, так и по сети по протоколу XDMCP (по умолчанию, сетевой вход обычно запрещен). На локальном дисплее, gdm запускает сервер X Window, устанавливает с ним соединение и выдает окно с запросом на ввод имени и пароля пользователя.

При успешном входе, gdm устанавливает все перечисленные на предыдущей странице переменные среды, а также переменную DISPLAY=имя дисплея X Window

Эта переменная используется программами, поддерживающими протокол X Window (X(5)), для установления соединения с сервером.

Затем gdm запускает командный интерпретатор shell, который интерпретирует файл /etc/gdm/Xsession. Этот файл считывает стандартные стартовые файлы shell /etc/profile и $HOME/.profile, так что все настройки переменных среды, которые сделали администратор системы и пользователь, также загружаются. Наконец, Xsession запускает менеджер графических сессий gnome-session(1), который и запускает, собственно, графическую пользовательскую среду. Если из графической среды вам необходимо запустить интерактивный shell или другие команды, ориентированные на работу с текстовым терминалом или со стандартными потоками ввода и вывода, можно запустить терминальный эмулятор gnome-terminal. Этот терминальный эмулятор создает псевдотерминал — специальное псевдоустройство, которое играет роль терминального порта для процессов соответствующей сессии.

Обычно запущенные с пользовательского терминала процессы, принадлежат одной и той же сессии (session). Сессия также создается для графической среды пользователя. При запуске терминальных эмуляторов, для каждого терминального окна создается своя сессия. Процессы одной сессии могут принадлежать разным группам процессов. Процесс может создать новую группу процессов (став лидером группы), вызвав setsid(2) или setpgid(2). Порожденные процессы наследуют от родительского процесса идентификаторы группы процессов, сессии и управляющий терминал. Группы процессов и сессии важны для управлениями заданиями и обработки сигналов. В частности, у терминала в каждый момент времени есть «основная» группа процессов. Только процессы этой группы могут читать данные с терминала. Это будет рассматриваться в разделе «Терминальный ввод-вывод».

Командные процессоры с управления заданиями, такие, как ksh(1) и bash(1), создают новую группу процессов для каждой запускаемой команды, а сами исполняются в своей собственной группе, содержащей только сам процесс shell. Исполнение процесса из основной группы, связанной с терминалом, может быть остановлено вводом стоп-символа ( по умолчанию). После этого shell делает свою группу основным процессом и выдает на терминал приглашение для ввода новой команды. Процессы остановленной группы затем могу быть запущены в фоновом режиме командой bg или снова сделаны основной группой командой fg. Имея несколько остановленных или фоновых групп, пользователь может переключаться между ними. Каждая такая группа и называется «заданием» (job). Например, переключение заданий можно использовать для того, чтобы иметь несколько запущенных текстовых редакторов (если ваш редактор не поддерживает одновременное редактирование нескольких файлов) или редактор и утилиту man для чтения страницы руководства. Управление заданиями в ksh(1) и bash(1) описано на соответствующих страницах руководства.

Среда исполнения процесса


Процесс имеет некоторый набор параметров, который называется его средой исполнения.Термин «среда» (environment) имеет два значения, узкое и широкое.

В узком смысле этого слова, «среда» обозначает совокупность экспортированных переменных командного интерпретатора shell.

Термин «среда исполнения процесса» шире и включает экспортированные переменные shell, открытые файлы, текущую директорию, устанавливаемые по умолчанию права доступа при создания файла и т. д. Также, частью среды исполнения процесса могут считаться глобальные параметры настройки системы, влияющие на работу процесса, например, системное ограничение на максимальную длину путевого имени файла или максимальный суммарный объем параметров exec(2).

Когда процесс начинает свое исполнение, он наследует большинство параметров среды исполнения от родителя. Затем процесс может изменять свою среду. Для этого в языке C доступны библиотечные функции и системные вызовы, а в shell — встроенные команды. Если, после изменения своей среды, процесс запустит другой процесс (станет его родителем), новый процесс унаследует измененную среду.

Cреда инициализируется процессом init и модифицируется при входе пользователя в систему программами login или gdm. При удаленном входе в систему при помощи ssh(1) или XDMCP также могут передаваться переменные среды. Так, по умолчанию, ssh передает переменные среды TERM (тип терминала) и TZ (временная зона, часовой пояс), так что удаленная сессия живет в соответствии с настройками часового пояса той системы, за клавиатурой которой сидит пользователь.

Shell изменяет свою среду исполнения при интерпретации входного файла /etc/profile. Этот файл содержит все команды и установки переменных среды, которые системный администратор хочет исполнить для каждого входящего в систему. Если личная директория содержит файл .profile, shell читает команды из этого файла и модифицирует среду конкретного пользователя. Поскольку все процессы терминальной сессии являются потомками входного shell, то все они наследуют сделанные в /etc/profile и $HOME/.profile настройки.

Поменять большинство параметров среды другого процесса (как родителя, так и потомка) после его создания штатными средствами невозможно. Два исключения из этого правила — это идентификатор группы процессов и идентификатор родителя. Используя системный вызов setpgid(2), можно менять групповую принадлежность других процессов вашей терминальной сессии. Изменение идентификатора родительского процесса осуществляется косвенным путем: если родительский процесс завершается раньше, чем какой-то из его потомков, «осиротевший» процесс усыновляется процессом init (процессом с pid=1).

Самый простой способ изменить остальные параметры среды исполнения другого процесса — это подключиться к этому процессу отладчиком и исполнить в контексте этого процесса функции или системные вызовы, изменяющие его среду. Вполне возможно, что такие изменения могут нарушить работу процесса. Так, например, изменение временной зоны (переменной TZ) в тот момент, когда программа исполняет функцию localtime(3C), может иметь труднопредсказуемые последствия. Поэтому и штатных средств для внесения таких изменений не предусмотрено. Именно поэтому, в shell, команды изменения среды, такие, как cd, umask, ulimit, export реализованы как встроенные команды, а не как внешние программы.
1   2   3   4   5   6   7


написать администратору сайта