Розрахунок програмного модуля (Звіт з лабораторної роботи № 3 з дисципліни "Операційні системи"), страница 3

               /* перевірка завершення вантажівки із заданим 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 доставив вантаж