/* перевірка завершення вантажівки із заданим ID, без очікування завершення */
pw=waitpid(mtr[nt].chpid,&stat,WNOHANG);
if (mtr[nt].chpid==pw)
{
/* якщо Вантажівка завершилася - повідомлення про його успішне завершення */
printf("%s - Вантажівка %s доставив вантаж\n", curtime(),mtr[nt].el->name);
}
else
{
/* якщо Вантажівка не завершилася, йому посилає сигнал KILL */
kill(mtr[nt].chpid,SIGKILL);
/* очікування завершення після сигналу */
waitpid(mtr[nt].chpid,&stat,0);
/* повідомлення про загибель */
printf("%s - Вантажівка %s розбився\n", curtime(),mtr[nt].el->name,stat);
}
}
}
Програмний модуль, що реалізує діяльність однієї вантажівки:
/********************************************/
/* Приклад для роботи :1 */
/********************************************/
/* Дочірній процес, */
/* моделююче поводження Вантажівки */
/********************************************/
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <sys/resource.h>
/* структура параметрів Вантажівки */
#include "../truck.h"
#include "../a0wait.c"
#include "../a1wait.c"
#include "../curtime.c"
static struct truck this;/* особисті дані */
static int thisState; /* стан */
/* параметри - назва, потужність, вага Вантажівки */
main(int an, char *av[])
{
char msg[40];
/* файл incl_e1.c */
/* прийом параметрів */
strcpy(this.name,av[0]);
sscanf(av[1],"%d",&(this.power));
sscanf(av[2],"%lf",&(this.weight));
/* ініціалізація генератора випадкових чисел */
srand(time(NULL));
/* стан - 0 */
thisState=0;
/* файл incl_e2.c */
/* повідомлення про початок */
printf("%s - у Вантажівку %s почали навантаження, пріоритет=%d\n", curtime(),
this.name,
getpriority(PRIO_PROCESS,getpid()));
/* час навантажування вантажівки - випадкова величина,
почасти залежна від його обсягу */
a1wait(2*((int)(this.weight-50)));
/* пошук кінчений, стан - 1 */
thisState=1;
/* файл incl_e3.c */
/* повідомлення про закінчення навантаження */
printf("%s - у Вантажівку %s занурили товар\n",curtime(),this.name);
/* час доставки залежить від потужності Вантажівки */
a0wait((int)(100-this.power/4444));
/* повідомлення про закінчення доставки */
printf("%s - Вантажівка %s доставив товар\n",curtime(),this.name);
/* завершення процесу */
exit(0);
}
09:07:45.372 - Початок роботи
09:07:45.374 - у Вантажівку Freightliner почали навантаження, пріоритет=0
09:07:45.392 - у Вантажівку International почали навантаження, пріоритет=0
09:07:45.396 - у Вантажівку Mack почали навантаження, пріоритет=0
09:07:45.399 - у Вантажівку Peterbilt почали навантаження, пріоритет=0
09:07:45.419 - у Вантажівку Kenuorth почали навантаження, пріоритет=0
09:07:45.423 - у Вантажівку Volvo почали навантаження, пріоритет=0
09:07:45.435 - у Вантажівку Sterling почали навантаження, пріоритет=0
09:07:45.444 - у Вантажівку Western_Star почали навантаження, пріоритет=0
09:07:45.800 - у Вантажівку Volvo занурили товар
09:07:47.293 - у Вантажівку Sterling занурили товар
09:07:48.497 - у Вантажівку International занурили товар
09:07:48.886 - у Вантажівку Peterbilt занурили товар
09:07:49.280 - у Вантажівку Mack занурили товар
09:07:49.631 - у Вантажівку Western_Star занурили товар
09:07:53.594 - у Вантажівку Freightliner занурили товар
09:07:54.547 - у Вантажівку Kenuorth занурили товар
09:08:01.860 - Вантажівка Volvo доставив товар
09:08:07.088 - Вантажівка Peterbilt доставив товар
09:08:07.237 - Вантажівка Western_Star доставив товар
09:08:07.525 - ЧАС ОЧІКУВАННЯ МИНУВ
09:08:07.821 - Вантажівка Freightliner розбився
09:08:08.037 - Вантажівка International розбився
09:08:08.193 - Вантажівка Mack розбився
09:08:08.194 - Вантажівка Peterbilt доставив вантаж
09:08:08.194 - Вантажівка Kenuorth розбився
09:08:08.194 - Вантажівка Volvo доставив вантаж
09:08:08.195 - Вантажівка Sterling розбився
09:08:08.195 - Вантажівка Western_Star доставив вантаж
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.