Задания к лабораторной работе по теме «Взаимодействие процессов» курса «Операционные системы». 1. Разработайте на языке «С» программу, создающую заданное в параметрах количество процессов, посылки сигнала SIGALRM всем процессам, порожденным задачей, и получения от каждого из них отклика SIGINT. Если за 10 секунд ожидания ответные сигналы не получены, то программа посылает SIGKILL всем своим потомкам, дожидается их завершения и при благополучном исходе формирует нулевой код возврата. Если хоть один процесс-потомок завершился с кодом возврата отличным от нуля, то должен быть сформирован код возврата с максимальным значением, полученным от процессов-потомков. 2. Положим, что существует программа alpha_gamma, которая на каждый из полученных сигналов выводит на стандартный вывод десятичную цифру, определяемую по номеру сигнала следующим образом: case case case case case case case case case case 6: 7: 8: 17: 11: 12: 13: 14: 15: 16: c=’0’; c=’1’; c=’2’; c=’3’; c=’4’; c=’5’; c=’6’; c=’7’; c=’8’; c=’9’; Напишите головную программу, которая бы вызывала программу alpha_gamma как самостоятельный процесс и с ее помощью распечатывала бы номер вашей зачетной книжки. По окончании печати alpha_gamma должна быть корректно завершена по сигналу SIGINT. #include <stdio.h> #include <signal.h> 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); }