Задания. Командные интерпретаторы, поддерживающие управления заданиями, такие как csh, обычно создают новую группу процессов для каждой введенной командной строки, независимо от того, будут ли они выполняться в фоновом или текущем режиме. Таким образом, задание обыкновенно состоит из одного процесса или набора процессов, соединенных между собой конвейерами
Потомки этих процессов также будут являться членами группы.
Также может иметь смысл заглянуть на сайт trucktrading.ru, ведь именно там можно узнать много нового на тему http://www.trucktrading.ru/. Тема запчасти для грузовиков может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт trucktrading.ru, и тема запчасти для грузовиков начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема запчасти для грузовиков очень подробно представлена на сайте trucktrading.ru. Трудно найти более детальное освещение темы запчасти для грузовиков чем это сделано на сайте trucktrading.ru. Спасибо сайту trucktrading.ru за такое доскональное преподнесение темы запчасти для грузовиков.
Сеансы входа в систему. В системе 4.3BSD каждый сеанс входа в систему может создавать несколько групп процессов (или заданий), которые функционируют одновременно, разделяя между собой один и тот же терминал. Поле t_pgrp структуры tty терминала всегда содержит группу текущего выполняющегося задания.
Управляющие терминалы. Если процесс с идентификатором, группы равным нулю, открывает терминал, то такой терминал становится управляющим для данного процесса, а сам процесс присоединяется к текущей управляющей группе терминала (поле p_pgrp структуры ргос процесса устанавливается равным полю t_pgrp структуры tty терминала). Если терминал в данный момент не является управляющим терминалом какой-либо группы, то процесс становится лидером (то есть поля p_pgrp структуры ргос процесса и t_pgrp структуры tty терминала устанавливаются равными значению PID процесса).
Прямые наследники init (то есть все командные интерпретаторы, установленные на вход в систему) первоначально обладают идентификатором группы, равным нулю. Установить идентификатор группы процесса в ноль может только суперпользователь.
Доступ к терминалу. Интерактивные процессы (то есть процессы, принадлежащие текущей управляющей группе терминала, полученной из поля t_pgrp структуры tty этого терминала) всегда обладают беспрепятственным доступом к терминалу. Если фоновый процесс попытается прочесть с терминала, драйвер пошлет сигнал SIGTTIN всем процессам, принадлежащим его группе. По умолчанию сигнал SIGTTIN приводит к приостановке работы получивших его процессов. Операция записи в терминал по умолчанию разрешена всем фоновым процессам. Система 4.3BSD предлагает настройку терминала (бит LT0ST0P, изменяемый при помощи вызова TIOCLSET ioctl), установка которой приводит к отправке сигнала SIGTT0U фоновому процессу, пытающемуся произвести запись в терминал. Задания, приостановленные сигналом SIGTTIN или SIGTT0U, могут продолжить работу после получения сигнала SIGC0NT.
Управляющая группа. Процесс, имеющий доступ к терминалу на чтение, может осуществить вызов TIOSPGRP ioctl для изменения значения идентификатора управляющей группы терминала (поле t_pgrp структуры tty) на любое другое. Командный интерпретатор использует эту возможность системы для вызова процесса из фонового выполнения в интерактивный режим и наоборот. Например, пользователь может возобновить работу приостановленной группы процессов и назначить ее активной, сделав эту группу управляющей и отправив ей сигнал SIGC0NT. Для этой цели в командных интерпретаторах csh и ksh предусмотрены команды fg и bg.
Закрытие терминала. Когда нет ни одного процесса, для которого данный терминал открыт, то такой терминал не связан с группой и его поле t_pgrp обнуляется. Это действие производится при помощи процедуры драйвера close, вызываемой в момент, когда последний дескриптор терминала закрывается.
Повторная инициализация линии терминала. ОС 4.3BSD обеспечивает системный вызов vhangup, который обычно используется процессом init для завершения текущего сеанса входа в систему и старта нового.
Вызов просматривает таблицу открытых файлов, находит каждый элемент, относящийся к этому терминалу, и делает его неиспользуемым. Это достигается посредством удаления состояния «открыт» в элементах таблицы открытых файлов либо в тех реализациях, в которых поддерживается интерфейс vnode (см. раздел 8.6), изменением вектора vnodeops на такой набор функций, которые просто возвращают ошибку.
Затем vhangup вызывает процедуру терминала close() и посылает сигнал SIGHUP управляющей группе этого терминала. Такой подход в ОС 4.3BSD является решением проблемы управления процессами, которые продолжают функционирование уже после завершения сеанса входа в систему.
Опубликовал katy
July 06 2015 16:03:21 ·
0 Комментариев ·
3176 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.