«Взаимодействие процессов» курса «Операционные системы»




Дата канвертавання26.04.2016
Памер18.77 Kb.
Задания к лабораторной работе по теме «Взаимодействие процессов» курса «Операционные системы».
1. Разработайте на языке «С» программу, создающую заданное в параметрах количество процессов, посылки сигнала SIGALRM всем процессам, порожденным задачей, и получения от каждого из них отклика SIGINT. Если за 10 секунд ожидания ответные сигналы не получены, то программа посылает SIGKILL всем своим потомкам, дожидается их завершения и при благополучном исходе формирует нулевой код возврата. Если хоть один процесс-потомок завершился с кодом возврата отличным от нуля, то должен быть сформирован код возврата с максимальным значением, полученным от процессов-потомков.
2. Положим, что существует программа alpha_gamma, которая на каждый из полученных сигналов выводит на стандартный вывод десятичную цифру, определяемую по номеру сигнала следующим образом:
case 6: c=’0’;

case 7: c=’1’;

case 8: c=’2’;

case 17: c=’3’;

case 11: c=’4’;

case 12: c=’5’;

case 13: c=’6’;

case 14: c=’7’;

case 15: c=’8’;

case 16: c=’9’;


Напишите головную программу, которая бы вызывала программу alpha_gamma как самостоятельный процесс и с ее помощью распечатывала бы номер вашей зачетной книжки. По окончании печати alpha_gamma должна быть корректно завершена по сигналу SIGINT.
#include

#include

void go_next(int sig)

{char c=’X’;

signal(sig,&go_next)

switch(sig)

{

case 6: c=’0’;



case 7: c=’1’;

case 8: c=’2’;

case 17: c=’3’;

case 11: c=’4’;

case 12: c=’5’;

case 13: c=’6’; // SIGPIPE

case 14: c=’7’; // SIGALRM

case 15: c=’8’; // SIGTERM

case 16: c=’9’;

}

printf(“%c\n”,c);



}
/* ===== Termination procedure ===== */

void stop_go(int sig)

{

printf(”Process %d is stopped by Parent: %d\n”,getpid(),getppid);



exit(1);

}
/* ===== ALPHA_GAMMA process body ===== */

main ()

{
setvbuf (stdout,(char*)NULL,_IONBF,0);



signal(6: ,&go_next);

signal(7: ,&go_next)

signal(8: ,&go_next);

signal(17: ,&go_next);

signal(11: ,&go_next);

signal(12: ,&go_next);

signal(13: ,&go_next);

signal(14: ,&go_next);

signal(15: ,&go_next);

signal(16: ,&go_next)

signal(SIGINT ,&stop_go);

printf(”Alpha_Gamma: %d\n personal number:\n”, getpid());

while (1)

{

pause ();



}

printf(”This message should not be printed\n”);



exit (3);

}


База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка