"UNIX. Профессиональное программирование" представляет собой подробнейшее справочное руководство для любого профессионального программиста, работающего с UNIX. Стивену Раго удалось обновить и дополнить текст фундаментального классического труда Стивенса, сохранив при этом точность и стиль оригинала. Содержание всех тем, примеров и прикладных программ обновлено в соответствии с последними версиями наиболее популярных реализаций UNIX.
Если приложение требует проверки прав пользователя на выполнение определенных задач, можно либо жестко зашить механизм аутентификации в код приложения, либо создать аналогичную функциональность, используя библиотеку РАМ. Преимущество РАМ заключается в том, что администратор может сконфигурировать разные способы аутентификации пользователей для выполнения различных задач, основываясь на локальной политике безопасности. Если вход в систему выполнен корректно, то программа . Вход с терминала . Командная оболочка, обнаружив этот признак, может соответственно изменить перечень действий, выполняемых при запуске. На самом деле программа . Она, например, может выводить так называемое . Но нас интересует только та функциональность, которую мы описали. Итак, запускается командная оболочка входа. Ее родительским процессом является процесс . Это состояние изображено на рис. Далее командная оболочка входа читает файлы начальной загрузки . В них обычно изменяются значения некоторых переменных окружения и добавляется множество новых. Например, большинство пользователей создают свой список каталогов поиска . Когда файлы начального запуска обработаны, мы наконец видим приглашение командной оболочки и можем вводить команды. Процесс с идентификатором. Состояние процессов после входа пользователя в систему с терминала . Взаимоотношения между процессами Вход в систему с терминала в . Вход в систему с терминала в . Главное отличие между процедурами входа в . Конфигурационная информация, определяющая терминальные устройства, для которых должна быть вызвана программа . В зависимости от используемой версии . Вход в систему с терминала в . Как правило, для входа с консоли используется . Этот дочерний процесс с помощью функции . Как только пароль будет введен, . Единственное отличие родительским процессом для командной оболочки становится процесс . Вход в систему через сетевое соединение . Вход в систему через сетевое соединение Главное физическое отличие между входом в систему с терминала, соединенного с главной машиной последовательным кабелем, и входом в систему через сетевое соединение состоит в том, что сетевое соединение не построено по принципу . В ситуациях, описанных в предыдущем разделе, процесс . Но в случае входа в систему через сетевое соединение все запросы поступают через драйвер сетевого интерфейса . Вместо того, чтобы запускать отдельный процесс для каждого возможного запроса на вход в систему, мы теперь ожидаем прибытия запросов на соединение. Чтобы одно и то же программное обеспечение могло обрабатывать вход в систему как с терминала, так и через сетевые соединения, используется программный драйвер, который называется псевдотерминалом. Этот драйвер эмулирует поведение обычного терминала, отображая операции с терминалом в сетевые операции и наоборот. В этом разделе мы рассмотрим последовательность действий, которая выполняется при входе в . Нас не интересуют все подробности программной реализации этих процессов их вы найдете в . Во время запуска системы процесс . Одним из демонов, запускаемых этим сценарием, яйляется . По окончании работы сценария родительским процессом для . Когда поступает запрос на соединение, демон . Предположим, что по адресу сервера . Пользователь, находящийся за другим компьютером . После этого клиент и сервер начинают обмен данными по протоколу . Взаимоотношения между процессами пользователь, запустивший клиентскую программу, выполняет вход в систему на сервере. Процесс с идентификатором . Последовательность действий, приводящая к запуску сервера . Родительский процесс продолжает обслуживать сетевое соединение, а дочерний процесс запускает программу . Родительский процесс связан с дочерним через псевдотерминал. В случае удачного входа в систему программа . Очевидно, что между драйвером псевдотерминала и пользовательским терминалом действует еще множество процессов. Мы рассмотрим их в главе . Очень важно понимать, что независимо от того, входим ли мы в систему через терминал . В последующих разделах мы увидим, что оболочка входа является началом сессии . запрос на соединение от клиента . Состояние процессов после входа пользователя через сетевое соединение Вход в систему через сетевое соединение в . Вход в систему через сетевое соединение в . Вход в систему через сетевое соединение в . В любом случае мы приходим к состоянию, изображенному на рис. Группы процессов Каждый процесс не только имеет идентификатор процесса, но и принадлежит к определенной группе процессов. Мы еще будем встречаться с группами процессов при обсуждении сигналов в главе . Взаимоотношения между процессами Группа процессов это коллекция из одного или более процессов, обычно связанных с выполнением одного и того же задания . Каждая группа процессов имеет уникальный идентификатор. Идентификатор группы процессов очень напоминает идентификатор процесса. Таким образом, вызов . Идентификатор группы процессов лидера группы совпадает с его идентификатором процесса. Вполне допустима ситуация, когда лидер группы создает группу процессов, процессы в этой группе и затем завершается. Группа процессов продолжает существовать до тех пор, пока в ней остается хотя бы один процесс, вне зависимости от того, завершил работу лидер группы или нет. Период от момента создания группы и до момента, когда последний процесс в группе покинет ее, называется временем жизни группы процессов. Последний оставшийся в группе процесс может либо завершиться, либо войти в состав другой группы процессов. Процесс может присоединиться к группе или создать новую группу процессов с помощью функции . Если аргументы имеют одинаковые значения, то процесс, заданный идентификатором . Если же в аргументе . Процесс может установить идентификатор группы только для себя самого и для своих дочерних процессов. Но процесс не может изменить идентификатор группы процессов дочернего процесса, который вызвал одну из функций семейства .