Группа процессов работающих под управлением одного пользователя в астра линукс это сеанс

Обновлено: 07.07.2024

Что такое лидеры сеансов, в ps -d которых выбираются все процессы, кроме лидеров сеансов?

В Linux каждый процесс имеет несколько идентификаторов, связанных с ним, в том числе:

Идентификатор процесса (PID)

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

ID родительского процесса (PPID)

Это просто PID процесса, который запустил данный процесс.

ID группы процессов (PGID)

Это просто PID лидера группы процессов. Если PID == PGID, то этот процесс является лидером группы процессов.

Идентификатор сеанса (SID)

Это просто PID лидера сеанса. Если PID == SID, то этот процесс является лидером сеанса.

Сессии и группы процессов - это просто способы рассматривать ряд связанных процессов как единое целое. Все члены группы процессов всегда принадлежат одному и тому же сеансу, но сеанс может иметь несколько групп процессов.

Обычно оболочка будет лидером сеанса, а каждый конвейер, выполняемый этой оболочкой, будет группой процессов. Это сделано для того, чтобы легко убить потомков оболочки при выходе из нее. (См. Выход (3) для подробностей.)

Я не думаю, что есть специальный термин для члена сеанса или группы процессов, который не является лидером.

Примечание. Используйте ps xao pid,ppid,pgid,sid,comm для просмотра этих идентификаторов.

Большинство процессов, вызываемых из оконного менеджера / графической среды, имеют тот же идентификатор сеанса, что и одна из программ запуска. Это позволяет ОС выполнять одну и ту же kill -HUP -$$ операцию над всеми программами: браузером, музыкальным проигрывателем, libreoffice, IM-клиентом и т. Д. Это процессы, которые не являются лидерами сеансов.

Пожалуйста, не возражайте, но мне, возможно, понадобится немного больше разъяснений - лидер сессии один, как называются другие, и как они выглядят (поведение, чем они отличаются от лидера сессии)? Мне нравится ваше объяснение, но мне все еще не хватает одного момента: IIUC, каждый раз, когда я запускаю процесс, он на самом деле является потомком оболочки, в которую я вошел (конечно, если я не отказался от нее). Почему ОС не может просто пройтись по дереву процессов и убить всех братьев и сестер этого процесса и их братьев и сестер? (На самом деле это то, о чем я всегда думал . до сегодняшнего дня: D) Так в чем же причина использования сессий? Когда графический интерфейс пользователя умирает, сигнал может получить все дерево процессов, а не группа сеансов. Два разных желаемых поведения: убить одно «приложение» (убить firefox и его плагины), а не убить все дочерние процессы (выход из графического интерфейса). Я ожидаю, что аналогичные работы с Emacs и Chrome.

Я думал, что знаю ответ на этот вопрос, но я написал программу на C, чтобы понять это.

Я скомпилировал его с cc -g -o sid sid.c помощью нескольких разных способов, чтобы увидеть, что происходит:

Я был немного удивлен тем, что Linux (2.6.39) вернул. Я также нашел справочную страницу раздела 7 «Учетные данные».

Мой совет - сделать man 7 credentials (или эквивалент, если не в Linux) и прочитать раздел о группе процессов и сеансе, чтобы узнать, сможете ли вы разобраться в этом.

1.Основные задачи администрирования ASTRA LINUX SE.

В общем случае процесс администрирования ОС на базе проекта Debian GNU/Linux (в том числе ASTRA LINUX SE) включает решение следующих основных задач:

  1. администрирование учётных записей пользователей и групп с целью организации многопользовательской работы ASTRA LINUX SE и реализации управления доступом процессов (субъект-сессий, функционирующих от имени учётных записей пользователей) к файлам, каталогам и другим объектам доступа ASTRA LINUX SE (сущностям);
  2. администрирование процессов с целью оптимизации распределения между ними ресурсов компьютера;
  3. администрирования запоминающих и периферийных устройств с целью контроля имеющихся в составе компьютера устройств и управления динамически подключаемыми устройствами.
  4. В случае включения компьютера с ASTRA LINUX SE в сетевую среду и его функционирования в составе домена сетевой инфраструктуры Astra Linux Directory (ALD) перечень задач дополняется задачами администрирования сети и доменной инфраструктуры. Эти задачи будут подробно рассмотрены в следующих лекциях.

2. Администрирование учётных записей пользователей и групп.

Отправной точкой реализации управления доступом в ASTRA LINUX SE являлось унаследованное от ОС семейства Linux дискреционное управление доступом. Поэтому, несмотря на то, что в настоящее время в ASTRA LINUX SE используются мандатные управление доступом и контроль целостности, а в перспективе ролевое управление доступом, целесообразно рассмотреть основные элементы дискреционного управления доступом, не утратившие своей актуальности в современных релизах ASTRA LINUX SE.

Дискреционное управление доступом в ОС семейства Linux базируется на понятии владения (использовании права доступа владения) файлом, каталогом, процессом (сущностями и субъект-сессиями). Так в файловых системах семейства extfs, которые по умолчанию используются в ASTRA LINUX SE, для каждого файла или каталога обязательно задана учётная запись пользователя — их владелец. Процесс, функционирующий от имени такой учётной записи-владельца сущности, имеет право изменять дискреционные права доступа к ней, например назначать их учётным записям других пользователей ASTRA LINUX SE на основе стандарта POSIX ACL .

Access Control List или ACL — список контроля доступа, который определяет, кто или что может получать доступ к конкретному объекту, и какие именно операции разрешено или запрещено этому субъекту проводить над объектом. Списки контроля доступа являются основой систем с избирательным управлением доступа.

Для оптимизации и облегчения администрирования дискреционного управления доступом в случаях, когда к одним и тем же файлам или каталогам требуется установить одинаковые права доступа более чем для одной учётной записи пользователя, в ASTRA LINUX SE применяются группы учётных записей пользователей. В результате для файлов и каталогов владельцем (обладателем к ним правом доступа владения) может быть задана группа. При этом для них остаются владельцами и соответствующие учётные записи пользователей. В перспективе при реализации в ASTRA LINUX SE ролевого управления доступом вместо учётных записей пользователей и групп владельцами будут задаваться роли или административные роли.

Таким образом, при управлении доступом в ASTRA LINUX SE, в том числе дискреционным, администрируют следующие его элементы:

  • учётные записи пользователей (account);
  • группы (логические объединения учётных записей пользователей с равными дискреционными правами доступа);
  • права доступа к файлам, каталогам, другим объектам доступа (сущностям и субъект-сессиям);
  • режимы доступа, обеспечивающие возможность учета ряда особенностей управления доступом.

Утилиты администрирования учётных записей пользователей и групп реализованы в пакете Shadow Suite.


Кроме них для этого используется ряд системных файлов, которые конфигурируются администратором системы. Такие файлы в рамках МРОСЛ ДП -модели рассматриваются как сущности, параметрически ассоциированные с учётными записями пользователей.

Основой для задания учётных записей пользователей и групп являются их идентификаторы:

  • uid (User ID) — число, уникально идентифицирующее учётную запись пользователя в ASTRA LINUX SE;
  • gid (Group ID) — число, уникально идентифицирующее группу пользователей ASTRA LINUX SE.

Эти идентификаторы хранятся в следующих конфигурационных файлах, которые используется специальным процессом login, реализующим вход пользователя в ASTRA LINUX SE — его идентификацию и аутентификацию:

  • /etc/passwd — файл с данными об учётных записях пользователей;
  • /etc/group — файл с данными об учётных записях групп пользователей.

учётная запись каждого пользователя представляет одну строку в файле/etc/passwd. Таким образом, регистрация новой учётной записи пользователя в системе, фактически, является добавлением соответствующей строки в этот файл.


Добавим пользователя admin.

Откроем файл /etc/passwd в редакторе mc


Разделителем полей данных в строке, соответствующей учётной записи пользователя, является символ «:». В результате у администратора с помощью команды grep есть возможность фильтрации требуемых данных об учётной записи пользователя, которая состоит из следующих элементов:

• username — уникальное символьное имя, присваиваемое каждой учётной записи пользователя (при выборе имени могут использоваться буквы и цифры, а также знак подчёркивания и точка);

• uid — уникальный идентификатор учётной записи пользователя (представлен числом);

• gid — уникальный идентификатор первичной группы, в которую входит учётная запись пользователя (представлен числом);

• password — пароль, который может храниться в зашифрованном виде непосредственно в рассматриваемой строке (если вместо пароля задан символ «х»), то он хранится в доступном для чтения и записи только администратору системном файле /etc/shadow в зашифрованном виде);


• full name — полное имя учётной записи пользователя (например, пользователь с username равным sidor может иметь полное имя «Ivan Sidorov», а также в этом же элементе через запятую могут перечисляться дополнительные сведения о пользователе: домашний и рабочий номера телефонов, адрес и т.д.);

• home directory — домашний каталог учётной записи пользователя, находящийся в каталоге /home;

• login shell — командный интерпретатор (shell), который запускается при входе пользователя в ASTRA LINUX SE, по умолчанию это интерпретатор bash (/bin/bash).

Создание, удаление и изменение учётных записей пользователей осуществляется администратором (в рамках МРОСЛ ДП-модели ему соответствует доверенная субъект-сессия, обладающая соответствующими текущими специальными административными ролями) с использованием следующих приёмов:

• непосредственное редактирование файла /etc/passwd;

• с применением утилит из пакетов passwd и adduser;

• с активизацией из меню «Пользователи и группы» утилиты с графическим интерфейсом «Управление политикой безопасности».

В ASTRA LINUX SE получение идентификатора учётной записи пользователя (uid), а также других связанных с ним наборов параметров, возможно с помощью команд whoami, id, who. Для изменения пароля учётной записи пользователя используется команда passwd, которая проверяет заданные правила формирования пароля, например, его минимальную длину, или же создан ли он на основе предыдущего пароля.

Для корректного администрирования учётной записи пользователя (в том числе с добавлением при её создании в домашний каталог необходимых конфигурационных файлов) администратор может использовать команды adduser, useradd (создание), usermod (модификация параметров) и userdel (удаление). В рамках МРОСЛ ДП-модели этим командам соответствуют де-юре правила вида create_ user, set-user_labels и delete-user.

В то же время для администрирования учётных записей пользователей целесообразно использовать утилиту с графическим интерфейсом «Управление политикой безопасности» (утилиту flу-admin-smc), доступную из элемента «Настройки» главного пользовательского меню.



Добавление учётной записи пользователя также осуществляется администратором с использованием утилиты «Управление политикой безопасности».

Для безопасности ASTRA LINUX SE важна регулярная проверка корректности параметров учётных записей пользователей, для чего администратор может использовать команду pwck (от password check), которая проверяет целостность данных и правильность формата записей в файлах /etc/passwd и /etc/shadow, при этом проверяются:

    • корректность количества полей в записях этих файлов;
    • уникальность имён учётных записей пользователей;
    • уникальность идентификаторов учётных записей пользователей;
    • корректность принадлежности каждой учётной записи пользователя её первичной группе;
    • корректность пути к домашнему каталогу каждой учётной записи пользователя;
    • корректность сведений об используемом интерпретаторе по умолчанию.

    Исправление выявленных командой pwck ошибок администратор может осуществить с помощью команды usermod.

    Данные о каждой группе учётных записей пользователей находятся в системном файле /etc/group в строке формата «groupname: password:gid:other members», которая состоит из следующих элемента

    • groupname — имя группы;

    • password — пароль, установленный для группы;

    • gid — идентификатор группы (аналогичный полю gid в учётной записи пользователя);

    • other members — другие пользователи, входящие в состав группы.

    Как и в случае системного файла /etc/passwd право на запись в файл /etc/group (который является сущностью, параметрически ассоциированной с учётными записями доверенных и недоверенных пользователей) имеет только администратор, остальные пользователи могут только просматривать его содержимое.

    Пользователь может получить данные о своей принадлежности к группам с помощью команд id и groups. Администратор может создавать, удалять или изменять параметры групп учётных записей пользователей:

    • редактируя файлы /etc/group и /etc/gshadow (назначение последнего аналогично назначению файла /etc/shadow) командой gpasswd;

    • используя команды groupadd и groupdel;

    • изменяя параметры групп учётных записей пользователей командой groupmod;


    • используя утилиту «Управление политикой безопасности».

    Для проверки корректности параметров групп учётных запиcей пользователей используется аналогичная команде pwck команда grpck, которая анализирует данные файлов /etc/group и /etc/gshadow, дополнительно используя для этого данные из файла /etc/passwd. При этом проверяются:

    • корректность количества полей в записях этих файлов;

    • уникальность имён групп;

    • уникальность идентификаторов групп;

    • корректность состава учётных записей пользователей и администраторов каждой группы.

    Исправление выявленных командой grpck ошибок администратор может осуществить с помощью команды groupmod.

    Так как в перспективе на смену группам в ASTRA LINUX SE придут роли или административные роли, то в рамках МРОСЛ ДП-модели к командам администрирования групп учётных записей пользователей соответствуют де-юре правила вида grant_admin_rights, remove_admin_rights, create-role, delete_role, create_hard_link_role, delete_hard_link_role, rename_role, get_role_attr, set_role_labels.

    3.Администрирование процессов.

    Администратору ASTRA LINUX SE требуется контролировать и управлять выполнением совокупности процессов (доверенных или недоверенных субъект-сессий в рамках МРОСЛ ДП-модели), которые были запущены пользователями в рмчках своих сеансов, а также ядром ASTRA LINUX SE, системными и прикладными сервисами.


    Основной командой для мониторинга состояния процессов в ASTRA LINUX SE является команда ps. Запущенная без опций и аргументов команда ps выводит на экран список процессов, выполняемых на активном терминале (tty) или псевдотерминале (pts), при этом для каждого процесса указываются:

    • PID — идентификатор процесса, который присваивается при его г гарте из числа свободных PID в диапазоне значений от 0 до (2 32 – 1);
    • TTY— терминал (tty) или псевдотерминал (pts), в котором выполняется процесс;
    • TIME — время выполнения процесса процессором;
    • CMD — имя программы, соответствующей выполняющемуся процессу.

    Использование параметров с командой ps позволяет просмотреть более детальную информацию о процессах.


    Опции, отбирающие процессы для отчёта:

    -A : все процессы;

    -a : связанные с конкретным терминалом, кроме главных системных процессов сеанса, часто используемая опция;

    -N : отрицание выбора;

    -d : все процессы, кроме главных системных процессов сеанса;

    -e : все процессы;

    -f : расширение информации

    T : все процессы на конкретном терминале;

    a : процессы, связанные с текущим терминалом, а также процессы других пользователей;

    r : информация только о работающих процессах;

    x : процессы, отсоединённые от терминала.

    • R : процесс выполняется в данный момент
    • S : процесс ожидает (т.е. спит менее 20 секунд)
    • I : процесс бездействует (т.е. спит больше 20 секунд)
    • D : процесс ожидает ввода-вывода (или другого недолгого события), непрерываемый
    • Z : zombie или defunct процесс, то есть завершившийся процесс, код возврата которого пока не считан родителем
    • T : процесс остановлен
    • W : процесс в свопе
    • < : процесс в приоритетном режиме.
    • N : процесс в режиме низкого приоритета
    • L : real-time процесс, имеются страницы, заблокированные в памяти.
    • s : лидер сессии

    Прототипом команды ps, позволяющим моделировать получении данных о процессах (субъект-сессиях), в рамках МРОСЛ ДП-модели является де-юре правило вида get-subject-attr.

    Команда pstree дополняет команду ps, с её помощью можно отобразить дерево процессов, функционирующих на всех терминалах, в формате «предок-потомок». Это позволяет проследить, цепочку порождения исследуемого процесса и получить возможность корректного управления им (особенно это касается его завершения) с учётом его «родственных связей». Без использования параметров команда pstree выводит дерево процессов, где каждый процесс идентифицируется именем соответствующей ему программы.


    Команды ps и pstree позволяют получить сведения о запущенных процессах, отследить их текущее состояние и взаимосвязи друг с другом. Для того чтобы получать данные о процессах, собранные за некоторый интервал времени, используется команда top. Принцип ее работы основан на периодическом анализе обновлений таблицы процессов ASTRA LINUX SE, что позволяет отследить изменение их параметров.


    Информация, выводимая командой top, содержит общие данные о процессах и ресурсах ASTRA LINUX SE:

    • число пользовательских сеансов (user);
    • усреднённая загруженность ресурсов системы (load average);
    • общее число процессов (total task) и число процессов, находящихся в разных состояниях (running, sleeping, stopped и zombie);
    • загруженность процессора (%Cpu);
    • распределение оперативной памяти между процессами (KiB Mem);
    • используемые области подкачки страниц (KiB Swap).

    Кроме того, команда top выводит в терминал все данные, выдаваемые командой ps в режиме детализированного вывода.

    При работе в защищённой графической подсистеме Fly информацию, аналогичную выводимой командой top, можно получить с использованием графической утилиты «Системный монитор» меню Системные» главного меню.


    Дополнительно графическая утилита «Системный монитор» может осуществлять управление процессами, при этом доступны следующие функции:

    • остановки/возобновления работы процессов;

    • прерывания (для допускающих прерывания процессов);

    В ASTRA LINUX SE администратор может управлять запущенными процессами, передавая им сигналы с использованием команды kill (в рамках МРОСЛ ДП-модели ей соответствует де-юре правило вида delete_session). Процесс, получив сигнал, может отреагировать на него либо по умолчанию, заданному ядром ASTRA LINUX SE, либо использовать собственную функцию обработки сигнала. В основном сигналы команды kill предназначены для реализации различных режимов прерывания, завершения, приостановления или возобновления работы процессов. Команда killall является расширением команды kill и отличается от нее тем, что посылает сигналы всем процессам, запущенным при выполнении одной программы.

    Также администратор и пользователи ASTRA LINUX SE имеют возможность влиять (например, с помощью команды nice) на использование выполняющимися процессами ресурса времени центрального процессора путём изменения их приоритета, указывающего ядру ASTRA LINUX SE, где расположить процесс в общей очереди готовых к выполнению на центральном процессоре процессов.

    После создания процесса ему присваивается уникальный идентификатор, возвращаемый системным вызовом fork(2) родительскому процессу. Дополнительно ядро назначает процессу идентификатор группы процессов (process group ID). Группа процессов включает один или более процессов и существует, пока в системе присутствует хотя бы один процесс этой группы. Временной интервал, начинающийся с создания группы и заканчивающийся, когда последний процесс ее покинет, называется временем жизни группы. Последний процесс может либо завершить свое выполнение, либо перейти в другую группу.

    Каждый процесс, помимо этого, является членом сеанса (session), являющегося набором одной нескольких групп процессов. Понятие сеанса было введено в UNIX для логического объединения процессов, а точнее, групп процессов, созданных в результате регистрации и последующей работы пользователя в системе. Таким образом, термин "сеанс работы" в системе тесно связан с понятием сеанса, описывающего набор процессов, которые порождены пользователем за время пребывания в системе.

    Процесс имеет возможность определить идентификатор собственной группы процессов или группы процесса, который является членом того же сеанса. Для этого используются два системных вызова: getpgrp(2) и getpgid(2):

    pid_t getpgid(pid_t pid);

    Аргумент pid, который передается функции getpgid(2), адресует процесс, идентификатор группы которого требуется узнать. Если этот процесс не принадлежит к тому же сеансу, что и процесс, сделавший системный вызов, функция возвращает ошибку.

    Системный вызов setpgid(2) позволяет процессу стать членом существующей группы или создать новую группу.

    int setpgid(pid_t pid, pid_t pgid);

    Функция устанавливает идентификатор группы процесса pid равным pgid. Процесс имеет возможность установить идентификатор группы для себя и для своих потомков (дочерних процессов). Однако процесс не может изменить идентификатор группы для дочернего процесса, который выполнил системный вызов exec(2), запускающий на выполнение другую программу.

    Если значения обоих аргументов равны, то создается новая группа с идентификатором pgid, а процесс становится лидером (group leader) этой группы. Поскольку именно таким образом создаются новые группы, их идентификаторы гарантированно уникальны. Заметим, что группа не удаляется при завершении ее лидера, пока в нее входит хотя бы один процесс.

    Идентификатор сеанса можно узнать с помощью функции getsid(2):

    pid_t getsid(pid_t pid);

    Как и в случае с группой, идентификатор pid должен адресовать процесс, являющийся членом того же сеанса, что и процесс, вызвавший getsid(2). Заметим, что эти ограничения не распространяются на процессы, имеющие привилегии суперпользователя.

    Вызов функции setsid(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-Группы

    15.1 Пользователи и группы

    15.1 Пользователи и группы Linux в целом и Ubuntu в частности — системы многопользовательские, т. е. на одном компьютере может быть несколько различных пользователей, каждый со своими собственными настройками, данными и правами доступа к различным системным функциям.Кроме

    Группы

    Группы Фирменная «вконтактовская» изюминка, которая и перетянула туда в свое время львиную часть аудитории «Одноклассников». Что такое «группы», долго объяснять не надо – все те же форумы, болтальные сообщества. Их «В Контакте» едва ли не больше, чем пользователей (на

    Группы и странички

    Группы и странички Кроме отлично знакомых нам профилей, в Facebook имеются еще и «группы», а также «фэн-странички» – штука совершенно новая, поскольку ни в Контактах, ни в Одноклассниках их нет. Задачи-то у них примерно одинаковые – сгруппировать вокруг близких вам тем как

    Группы

    Группы С группами мы уже знакомы: они имеются в любой уважающей себя «социалке», например, в тех же Контактах. Фактически это самый обычный форум, болтальная тусовка, где близкие по духу слои общественности могут вволю обсасывать любую тему, словоблудствуя в рамках оной в

    Сеансы Paint

    Сеансы Paint Наиболее общий способ получения объекта Graphics заключается во взаимодействии с событием Paint. Вспомните из предыдущей главы о том, что класс Control определяет виртуальный метод с именем OnPaint(). Чтобы форма отображала графические данные на своей поверхности, вы можете

    6.6. Группы

    6.6. Группы Иногда пользователей объединяют в группы. Группы позволяют более эффективно управлять правами пользователей. Например, у нас есть три пользователя: igor, pavel и alex, которые должны совместно работать над проектом. Тогда их удобно объединить в одну группу —

    Одним из основных применений сигналов при интерактивной работе пользователя в системе является механизм управления «заданиями», которыми пользуются командные интерпретаторы и подобные интерактивные программы, например lftp.

    Сеансы и группы процессов Linux: управление заданиями

    Для удобства управления процессами при помощи сигналов они объединяются в группы и сеансы (см. credentials), проиллюстрированные в листинге ниже при помощи команды ps атрибутами PGID (process group identifier) и SID (session identifier).

    Процесс (создавший группу), чей идентификатор PID совпадает с идентификатором PGID, группы, носит название лидера группы.

    Только одна группа сеанса, называемая «терминальной» TGPID, является группой «переднего» (foreground) фона, остальные группы сеанса являются группами «заднего» (background) фона.

    Командный интерпретатор формирует свои задания «заднего» О или «переднего» фона ©, Помещая процессы заданий в соответствующие группы. Механизм управления заданиями всегда посылает «терминальные» сигналы ^C SIGINT, ^\SIGQUIT всем процессам текущей «терминальной» группы.

    Для смены терминальной группы используется сигнал № 20 SIGTSTP (terminal stop signal), также отсылаемый всем процессам «терминальной» группы при получении драйвером терминала управляющего символа ^Z (SUB), генерируемого клавишами Ctrl+Z.

    Обработчик сигнала SIGTSTP по умолчанию приостанавливает процессы, и управление возвращается к командному интерпретатору ©, группа которого, становится «терминальной». При помощи встроенных команд fg (foreground), bg (background) можно продолжить (SIGCONT) выполнение указанного задания (всех процессов .его группы) на «переднем» или «заднем» фоне, а при помощи команды jobs -l получить список всех заданий вместе с номерами их групп процессов.

    $ dd tf=/dev/zero of=/dev/null &

    $ ps jf

    $ man dd

    Ctrl+Z
    [2]+ Остановлено man dd

    $ ps jf
    PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND

    3094 3099 3099 3099 pts/0 3310 Ss 1000 0:00 bash
    3099 3181 3181 3099 pts/0 3310 R 1000 4:48 \_ dd if=/dev/zero of=
    3099 193 3193 3099 pts/0 3310 T 1000 0:00 \_ man dd
    3193 3203 3193 3099 pts/0 3310 T 1000 0:00 | \_ pager -s
    3099 3310 3310 3099 pts/0 3310 R+ 1000 0:00 \_ ps jf

    $ fg %1

    dd if=/dev/zero of=/dev/null

    ^Z
    [1]+ Остановлено dd if=/dev/zero of=/dev/null

    $ ps f

    PID TTY STAT TIME COMMAND
    3099 pts/0 Ss 0:00 bash
    3181 pts/0 T 26:44 \_ dd if=/dev/zero of=/dev/null
    3193 pts/0 T 0:00 \_ man dd
    3203 pts/0 T 0:00 | \_ pager -s
    3937 pts/0 R+ 0:00 \_ ps f

    $ bg 1

    [1]+ dd if=/dev/zero of=/dev/null &

    $ jobs
    [1]+ Остановлено ddif=/dev/zero of=/dev/null

    $ fg
    dd if=/dev/zero of=/dev/null |
    ^C11771330744+0 записей получено

    11771330743+0 записей отправлено
    скопировано 6026921340416 байт (6,0 ТВ), 8400,83 с, 717 МВ/с

    Кроме переключения группы «переднего» фона, механизм управления заданиями координирует «совместный» доступ процессов к управляющему терминалу. При «одновременном» вводе информации с одного терминала несколькими процессами результат оказывается непредсказуем, т, к. нет возможности предугадать порядок и объемы считываемой информации.

    Поэтому ввод (input) разрешен только процессам группы «переднего» фона, а группа формируется так, что только один из них в реальности будет производить чтение.

    Процессам группы «заднего» фона ввод запрещен, а любые попытки подавляются при помощи сигнала SIGTTIN (terminal stop on input signal), доставка которого, приводит к приостановке процесса.

    В примере из листинга ниже при составлении текста письма посредством команды mail ее процесс был временно приостановлен при помощи ^Z и SIGTSTP для получения доступа к командному интерпретатору.

    Попытка продолжить в выполнение задания mail на «заднем» фоне не увенчалась успехом, т. к. была подавлена за чтение терминала. Продолжение задания на «переднем» фоне дает возможность закончить ввод текста, письма и завершить ввод управляющим символом ^Z (EOT).

    Приостановка при вводе из заднего фона (SIGTTIN)

    $ which schedtool

    $ dpkg -S /usr/bin/schedtool

    $ bg

    $ jobs -l
    [1]+ 12025 Остановлено (ввод с терминала)

    $ ps fj

    ^D

    Настроечный флаг драйвера терминала tostop (terminal output stop) позволяет запретить вывод из заднего фона так же, как и ввод. При запрещенном выводе из заднего фона все попытки будут подавляться сигналом SIGTTOU (terminal stop on output signal), приостанавливающим процесс. В листинге ниже проиллюстрировано действие сигнала SIGTTOU при включении настроечного флага tostop посредством команды stty.

    Приостановка при выводе из заднего фона (SIGTTOU)

    $ stty tostop

    $ ps f

    PID TTY STAT TIME COMMAND
    32535 pts/1 S 0:00 -bash
    356 pts/1 T 0:00 \_ find / -type f -size 0
    360 pts/1 R+ 0:00 \_ ps f

    Читайте также: