Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторная работа2.doc
Скачиваний:
0
Добавлен:
04.01.2020
Размер:
236.54 Кб
Скачать

4. Цели и задачи

Изучение понятия процесса, функций порождения и замещения процессов. Получение опыта создания многопроцессных программ.

5. Порядок выполнения лабораторной работы

1. Написать отчет по приведенной в варианте программе: составить схему процессов, указать программный код, выполняемый каждым процессом, указать действия выполняемые процессами. Сколько процессов создается во время работы программы? Все ли процессы завершаются?

2. Составить программу на языке С – перед пользователем появляется меню:

1 – Выполнить введенную команду

2 – Запустить на исполнение файл со сценарием (см. вариант в работе 1)

3 – Выполнить действие, указанное в варианте

4 - Выход

Для выполнения пунктов 1-3 использовать порождение дочернего процесса.

Для третьего пункта предполагается реализация посредством команд shell, сформированных в строки аргументов функций execlp или system, но если число команд shell велико тогда можно создать командный файл и запустить его с помощью execlp или system.

6. Варианты заданий (1-15)

1

Программа

if ( fork() == 0 ) for (int i=0 ; i<2 ; i++) fork() ;

Действие

Изменить указанные права доступа для указанного файла

2

Программа

for (int i=0 ; i<4 ; i++) fork() ;

Действие

Сделать все файлы указанной директории исполняемыми

3

Программа

fork() ; if (fork() == 0 ) fork() ;

Действие

Вывести список процессов указанного пользователя

4

Программа

if ( fork() == 0 ) fork() ; if ( fork() == 0 ) fork() ;

Действие

Вывести количество указанных процессов текущего пользователя

5

Программа

for (int i=0 ; i<6 ; i++) if ( fork() == 0 ) break ;

Действие

Вывести список терминалов указанного пользователя

6

Программа

if ( fork() != 0 ) for (int i=0 ; i<3 ; i++) fork() ;

Действие

Вывести количество работающих процессов с идентификаторами, лежащими в указанном интервале

7

Программа

for (int i=0 ; i<3 ; i++) if ( fork()==0 && i==0) break ;

Действие

Вывести количество файлов в указанной директории

8

Программа

fork() ; if ( fork() != 0 ) fork() ;

Действие

Вывести количество пользователей, работающих в системе

9

Программа

int pid = getpid() ; fork () ; if ( fork() == pid ) fork() ;

Действие

Вывести список имен пользователей, работающих в системе

10

Программа

fork () ; fork () ;

Действие

Вывести количество запущенных процессов bash

11

Программа

if ( fork() != 0 ) fork() ; if ( fork() != 0 ) fork() ;

Действие

Завершить процесс с указанным именем

12

Программа

if (fork() == 0 ) if (fork() == 0 ) fork() ;

Действие

Завершить процесс с указанным идентификатором

13

Программа

if ( fork() != 0 ) for (int i=0 ; i<2 ; i++) fork() ;

Действие

Отослать указанное сообщение указанному пользователю

14

Программа

for (int i=0 ; i<4 ; i++) if ( fork() == 0 && i>0) break ;

Действие

Отослать сообщение «ПРИВЕТ» текущему пользователю на все терминалы

15

Программа

int pid = getpid() ; if ( fork() == pid ) { fork() ; fork() ; }

Действие

Сделать указанный файл исполняемым