Написать программу, где главный процесс породит 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!