
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() ; } |
Действие |
Сделать указанный файл исполняемым |