русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Установить идентификатор группы процессов - Пример


Дата добавления: 2013-12-23; просмотров: 1193; Нарушение авторских прав


Получение/установка идентификатора группы процессов

Получение/установка идентификатора сессии

Каждый процесс принадлежит к сессии и группе процессов. Сессия создается для вас, когда вы входите в систему. Первый терминал, открытый лидером сессии, который не был уже ассоции­рован с другой сессией, становится управляющим терминалом для этой сессии. Если при откры­тии терминала лидер сессии укажет флаг NOCTTY, терминал не станет управляющим. Это поз­воляет процессам-демонам выводить сообщения на системную консоль.

Управляющий терминал генерирует сигналы завершения и прерывания (quit и interrupt), а также сигналы управления заданиями. Управляющим терминалом для вашего shell'а является тот тер­минал, с которого вы вошли в систему. Управляющий терминал наследуется процессом, поро­жденным при помощи fork(2). Процесс может разорвать связь со своим управляющим термина­лом, создав новую сессию с использованием setsid(2).

Если сессия так и не откроет управляющий терминал, соответствующий процесс будет назы­ваться «демоном» (daemon). Большинство системных сервисных процессов, таких, как init(1M), svc.startd(1M) crond(1M) или сетевых сервисов, таких, как sshd(1M), запускаются как демоны. Иногда демонами называют также системные процессы ttymon(1M), обслуживающие терми­нальные порты, хотя эти процессы имеют управляющие терминалы.

Если вызывающий процесс не является уже лидером группы процессов, setsid(2) устанавливает идентификаторы группы процессов и сессии вызывающего процесса равными его идентифика­тору процесса и отсоединяет его от управляющего терминала. setsid(2) создает новую сессию, превращая вызвавший процесс в лидера этой сессии. Новые сессии создаются чтобы:

1. отсоединить вызвавший процесс от терминала, так что этот процесс не будет получать от этого терминала сигналы SIGHUP, SIGINT и сигналы управления заданиями.



2. позволить процессу назначить новый управляющий терминал. Только лидер сессии может назначить управляющий терминал. Например, ttymon создает новую сессию и, таким об­разом, назначает управляющий терминал, когда пользователь входит в систему.

getsid(2) возвращает идентификатор сессии процесса с идентификатором, равным pid. Если pid равен нулю, getsid(2) возвращает идентификатор сессии вызвавшего процесса.

 

 

Этот пример показывает, как создать группу процессов, используя setpgid(2). Создаются три под­процесса, и каждый распечатывает значение своего идентификатора группы процессов. Пример демонстрируется так:

$ setpgid

[6426] Original process group id: 179

[6426] New process group id: 6426

 

[6427] Process group id: 6426

 

[6428] Process group id: 6426

 

[6429] Process group id: 6426

Эта выдача предполагает, что программа запущена из sh. Любой процесс, запущенный с управ­ляющего терминала, принадлежит основной группе. Таким образом, процесс изначально при­надлежит к группе основных процессов. Затем, в строке 14, он становится лидером группы про­цессов. Его подпроцессы наследуют новый идентификатор группы процессов, и принадлежат той же группе, что и их родитель. Эта новая группа процессов будет фоновой, и поэтому не бу­дет получать сигналы, связанные с терминалом. Если программа исполняется из ksh или bash, вывод будет выглядеть так:

$ setpgid

[6426] Original process group id: 6426

[6426] New process group id: 6426

 

[6427] Process group id: 6426

 

[6428] Process group id: 6426

 

[6429] Process group id: 6426

 

ksh создает новую группу процессов для каждой исполняемой команды. Поэтому setpgid(2) в строке 14 не делает ничего наблюдаемого, ведь процесс уже является лидером группы. Чтобы добиться более интересного поведения, можно сначала запустить sh, а только потом запускать программу, тогда при запуске программы лидером ее группы будет процесс sh.

Файл: setpgid.c

УСТАНОВИТЬ ИДЕНТИФИКАТОР ГРУППЫ ПРОЦЕССОВ - ПРИМЕР

 

1 #include <sys/types.h>

2 #include <unistd.h>

3 #include <stdlib.h>

4 #include <stdio.h>

5 #define NUMCHILD 3

7 main()

8 {

9 int i;

11 printf("[%ld] Original process group id: %ld\n",

12 getpid(), getpgid(0));

14 if (setpgid(0, 0) == -1) {

15 perror("");

16 exit(1);

17 }

19 printf("[%ld] New process group id: %ld\n",

20 getpid(), getpgid(0));

22 for (i = 0; i < NUMCHILD; i++ ) {

23 if (fork() == 0) { /* child */

24 printf("\n\t[%ld] Process group id: %ld\n",

25 getpid(), getpgid(0));

26 exit(0);

27 }

28 }

29 }

 



<== предыдущая лекция | следующая лекция ==>
Сессии и группы процессов | Пример - Группа первого плана, связанная с терминалом


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.