Основы операционных систем. Практикум



         

Изучение особенностей получения терминальных сигналов текущей и фоновой группой процессов


Возьмем тривиальную программу 13–14-1.c, в которой процесс порождает ребенка, и они оба зацикливаются, и на ее основе проиллюстрируем сказанное выше.

/* Тривиальная программа для иллюстрации понятий группа процессов, сеанс, фоновая группа и т.д. */ #include <unistd.h> int main(void){ (void)fork(); while(1); return 0; }

Листинг 13-14.1. Тривиальная программа (13–14-1.c) для иллюстрации понятий группа процессов, сеанс, фоновая группа и т.д.

Для этого будем использовать команду ps с опциями –e и j, которая позволяет получить информацию обо всех процессах в системе и узнать их идентификаторы, идентификаторы групп процессов и сеансов, управляющий терминал сеанса и к какой группе процессов он приписан. Набрав команду "ps –e j" (обратите внимание на наличие пробела между буквами e и j!!!) мы получим список всех процессов в системе. Колонка PID содержит идентификаторы процессов, колонка PGID – идентификаторы групп, к которым они принадлежат, колонка SID – идентификаторы сеансов, колонка TTY – номер соответствующего управляющего терминала, колонка TPGID (может присутствовать не во всех версиях UNIX, но в Linux есть) – к какой группе процессов приписан управляющий терминал.

Наберите тривиальную программу, откомпилируйте ее и запустите на исполнение (лучше всего из-под оболочки Midnight Commander – mc). Запустив команду "ps –e j" с другого экрана, проанализируйте значения идентификаторов группы процессов, сеансов, прикрепления управляющего терминала, текущей и фоновой групп. Убедитесь, что тривиальные процессы относятся к текущей группе сеанса. Проверьте реакцию текущей группы на сигналы SIGINT – нажатие клавиш <CTRL> и <C> – и SIGQUIT – нажатие клавиш <CTRL> и <4>.

Запустите теперь тривиальную программу в фоновом режиме, например командой "a.out &". Проанализируйте значения идентификаторов группы процессов, сеансов, прикрепления управляющего терминала, текущей и фоновой групп. Убедитесь, что тривиальные процессы относятся к фоновой группе сеанса. Проверьте реакцию фоновой группы на сигналы SIGINT – нажатие клавиш <CTRL> и <C> – и SIGQUIT – нажатие клавиш <CTRL> и <4>. Ликвидируйте тривиальные процессы с помощью команды kill.




Содержание  Назад  Вперед