Группы и сеансы
Группы и сеансы
После создания процесса ему присваивается уникальный идентификатор, возвращаемый системным вызовом fork(2) родительскому процессу. Дополнительно ядро назначает процессу идентификатор группы процессов (process group ID). Группа процессов включает один или более процессов и существует, пока в системе присутствует хотя бы один процесс этой группы. Временной интервал, начинающийся с создания группы и заканчивающийся, когда последний процесс ее покинет, называется временем жизни группы. Последний процесс может либо завершить свое выполнение, либо перейти в другую группу.
Многие системные вызовы могут быть применены как к единичному процессу, так и ко всем процессам группы. Например, системный вызов kill(2) может отправить сигнал как одному процессу, так и всем процессам указанной группы. Точно так же функция waitpid(2) позволяет родительскому процессу ожидать завершения конкретного процесса или любого процесса группы.
Каждый процесс, помимо этого, является членом сеанса (session), являющегося набором одной нескольких групп процессов. Понятие сеанса было введено в UNIX для логического объединения процессов, а точнее, групп процессов, созданных в результате регистрации и последующей работы пользователя в системе. Таким образом, термин "сеанс работы" в системе тесно связан с понятием сеанса, описывающего набор процессов, которые порождены пользователем за время пребывания в системе.
Процесс имеет возможность определить идентификатор собственной группы процессов или группы процесса, который является членом того же сеанса. Для этого используются два системных вызова: getpgrp(2) и getpgid(2):
#include <sys/types.h>
#include <unistd.h>
pid_t getpgrp(void);
pid_t getpgid(pid_t pid);
Аргумент pid, который передается функции getpgid(2), адресует процесс, идентификатор группы которого требуется узнать. Если этот процесс не принадлежит к тому же сеансу, что и процесс, сделавший системный вызов, функция возвращает ошибку.
Системный вызов setpgid(2) позволяет процессу стать членом существующей группы или создать новую группу.
#include <sys/types.h>
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
Функция устанавливает идентификатор группы процесса pid равным pgid. Процесс имеет возможность установить идентификатор группы для себя и для своих потомков (дочерних процессов). Однако процесс не может изменить идентификатор группы для дочернего процесса, который выполнил системный вызов exec(2), запускающий на выполнение другую программу.
Если значения обоих аргументов равны, то создается новая группа с идентификатором pgid, а процесс становится лидером (group leader) этой группы. Поскольку именно таким образом создаются новые группы, их идентификаторы гарантированно уникальны. Заметим, что группа не удаляется при завершении ее лидера, пока в нее входит хотя бы один процесс.
Идентификатор сеанса можно узнать с помощью функции getsid(2):
#include <sys/types.h>
#include <unistd.h>
pid_t getsid(pid_t pid);
Как и в случае с группой, идентификатор pid должен адресовать процесс, являющийся членом того же сеанса, что и процесс, вызвавший getsid(2). Заметим, что эти ограничения не распространяются на процессы, имеющие привилегии суперпользователя.
Вызов функции setsid(2) приводит к созданию нового сеанса:
#include <sys/types.h>
#include <unistd.h>
pid_t setsid(void);
Новый сеанс создается лишь при условии, что процесс не является лидером какого-либо сеанса. В случае успеха процесс становится лидером сеанса и лидером новой группы.
Понятия группы и сеанса тесно связаны с терминалом или, точнее, с драйвером терминала. Каждый сеанс может иметь один ассоциированный терминал, который называется управляющим терминалом (controlling terminal), а группы, созданные в данном сеансе, наследуют этот управляющий терминал. Наличие управляющего терминала позволяет ядру контролировать стандартный ввод/вывод процессов, а также дает возможность отправить сигнал всем процессам ассоциированной с терминалом группы, например, при его отключении. Типичным примером является регистрация и работа пользователя в системе. При входе в систему терминал пользователя становится управляющим для лидера сеанса (в данном случае для командного интерпретатора shell) и всех процессов, порожденных лидером (в данном случае для всех процессов, которые запускает пользователь из командной строки интерпретатора). При выходе пользователя из системы shell завершает свою работу и таким образом отключается от управляющего терминала, что вызывает отправление сигнала SIGHUP всем незавершенным процессам текущей группы. Это гарантирует, что после завершения работы пользователя в системе не останется запущенных им процессов.[26]
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
9.2. Группы процессов
9.2. Группы процессов Группа процесса является группой связанных процессов, которые в целях управления заданием (job) рассматриваются вместе. Процессы с одним и тем же ID группы процессов являются членами группы процессов, а процесс, PID которого равен ID группы процессов,
10.6. Сеансы и группы процессов
10.6. Сеансы и группы процессов В Linux, как и в других системах Unix, пользователи обычно взаимодействуют с группами взаимосвязанных процессов. Хотя изначально они входят через единственный терминал и используют единственный процесс (а именно — оболочку, предоставляющую
10.6.1. Сеансы
10.6.1. Сеансы Когда пользователь выходит из системы, ядро должно прервать все процессы, которые пользователь запустил (иначе может остаться множество процессов, которые будут ожидать ввода, а тот никогда не последует). Чтобы упростить эту задачу, процессы организуются в
Группы и сеансы
Группы и сеансы Группы процессов и сеансы уже обсуждались в главе 2. Такое представление набора процессов используется в UNIX для управления доступом к терминалу и поддержки пользовательских сеансов работы в системе. Перечислим еще раз наиболее важные понятия, связанные с
Сеансы многоадресной передачи
Сеансы многоадресной передачи Сочетание адреса многоадресной передачи IPv4 или IPv6 и порта транспортного уровня часто называется сеансом (session), особенно если речь идет о передаче потокового мультимедиа. Например, телеконференция может объединять два сеанса: один аудио- и
Пользователи и группы
Пользователи и группы А вот модуль Пользователи и группы — родной для Cinnamon, из CLI его можно запустить командой cinnamon-settings-users. Очевидно, что и здесь потребуется пароль, ввод которого даст доступ к святая святых — списку пользователей и групп:От описания возможных тут
Rambler-Группы
Rambler-Группы (http://groups.rambler.ru)Создание собственного «болтальника» стало чуть запоздалым, но удачным ходом Рамблера – его основной конкурент Yandex обзавестись подобным сервисом еще не успел, а монополия Talk.Ru общительным сетянам уже порядком приелась.Итог закономерен –
15.1 Пользователи и группы
15.1 Пользователи и группы Linux в целом и Ubuntu в частности — системы многопользовательские, т. е. на одном компьютере может быть несколько различных пользователей, каждый со своими собственными настройками, данными и правами доступа к различным системным функциям.Кроме
Группы
Группы Фирменная «вконтактовская» изюминка, которая и перетянула туда в свое время львиную часть аудитории «Одноклассников». Что такое «группы», долго объяснять не надо – все те же форумы, болтальные сообщества. Их «В Контакте» едва ли не больше, чем пользователей (на
Группы и странички
Группы и странички Кроме отлично знакомых нам профилей, в Facebook имеются еще и «группы», а также «фэн-странички» – штука совершенно новая, поскольку ни в Контактах, ни в Одноклассниках их нет. Задачи-то у них примерно одинаковые – сгруппировать вокруг близких вам тем как
Группы
Группы С группами мы уже знакомы: они имеются в любой уважающей себя «социалке», например, в тех же Контактах. Фактически это самый обычный форум, болтальная тусовка, где близкие по духу слои общественности могут вволю обсасывать любую тему, словоблудствуя в рамках оной в
Сеансы Paint
Сеансы Paint Наиболее общий способ получения объекта Graphics заключается во взаимодействии с событием Paint. Вспомните из предыдущей главы о том, что класс Control определяет виртуальный метод с именем OnPaint(). Чтобы форма отображала графические данные на своей поверхности, вы можете
6.6. Группы
6.6. Группы Иногда пользователей объединяют в группы. Группы позволяют более эффективно управлять правами пользователей. Например, у нас есть три пользователя: igor, pavel и alex, которые должны совместно работать над проектом. Тогда их удобно объединить в одну группу —