Написать программу, где главный процесс породит 15 дочерних процессов и завершится, не дождавшись завершения дочерних процессов.
Пример синхронизации процессов.
Если запустить данную программу без параметров, то главный процесс породит 15 дочерних процессов и завершится, не дождавшись завершения дочерних процессов.
Если запустить программу с одним и более параметром, то родительский процесс, породивши 15 дочерних, будет ждать завершения всех дочерних процессов прежде чем завершиться самому.
При завершении дочернего процесса родительский процесс выводит значение и код, возвращаемые дочерним процессом.
Текст программы:
#include <stdio.h>
#include <signal.h>
int i,ret_val,ret_code; //переменная цикла возвращаемое значение и код
int pid; //идентификатор процесса
int main(int argc,char *argv[])
{
for(i=0;i<15;i++) //в цикле 15 раз порождаем новый процесс
{
pid=fork(); //и переключаемся на его выполнение
switch (pid) //анализируем идентификатор процесса
{
case -1:{ //если равен -1 - ошибка
perror("\n\tError");
return 0;
}
case 0:{ //если равен 0 - находимся в дочернем процессе
printf("\t Daughter process %i pid=%i\n",i,getpid());
sleep(1); //задержка на одну секунду
exit(i); //возвращаем родителю номер процесса
}
default:{if(argc>1)
{
ret_val=wait(&ret_code);//ожидаем завершения процесса-потомка
printf("\tret_val=%i ret_code=%i\n",ret_val,ret_code);
}
}
}
}
return 0;
}
4.Содержание отчета:
1. Цель работы.
2. Краткое изложение теории.
3. В рабочем отчете зафиксировать задание, результат его выполнения.
4. Сделать выводы по работе.
Дата добавления: 2020-04-08; просмотров: 48; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!