Управление процессами и нитями

Страницы работы

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра автоматики и вычислительной техники

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 3(часть2)

Дисциплина: системное программное обеспечение

Тема: управление процессами и нитями.

Выполнил ст. группы 4081/1:                                                                          Хромов И.Б

   Преподаватель                                                                                    Душутина Е.В

Санкт-Петербург

2010


1. Порождение процессов в QNX

Семейство функций spawn() позволяет создавать и исполнять процесс, задаваемый путем path к исполняемому файлу. При этом в зависимости от значения аргумента mode возможно:

-процесс-родитель приостанавливает свое выполнение на время выполнения потомка (P_WAIT);
-родитель выполняется независимо от потомка (P_NOWAIT);
-P_NOWAITO аналогично P_NOWAIT

-потомок замещает место родителя в памяти (P_OVERLAY).

Продемонстрируем действие функций этого семейства на примере программы father.c:

#include <process.h>

#include <stdio.h>

#include <stdlib.h>

char * const args[]={

"./son",

NULL};

main(int argc, char *argv[]){

      int status;

      switch(argv[1][0]){

      case '1':

            spawnl(P_WAIT,"./son","son", NULL);

            printf("father here\n");

            break;

      case '2':

            spawnle(P_NOWAIT,"./son","son",NULL,NULL);

            printf("father here\n");

            break;     

      case '3':

            spawnlp(P_NOWAITO,"./son","son",NULL);

            printf("father here\n");

            break;     

      case '4':

            spawnv(P_OVERLAY,"./son",args);

            printf("father here\n");

            break;

      case '5':

            spawnvp(P_WAIT,"./son",args);

            printf("father here\n");

            break;

      }

      wait(&status);

      printf("end of father\n");

}

Son.h

#include <stdio.h>

main(){

      sleep(1);

      printf("son here\n");

}

Результат выполнения программы:

# gcc father.c -o father

# gcc son.c -o son

# ./father 1

son here

father here

end of father

# ./father 2

father here

son here

end of father

# ./father 3

father here

end of father

# son here

# ./father 4

son here

# ./father 5

son here

father here

end of father

Можно обнаружить  аналогии spawn-функций с POSIX-функциями. Они заменяют финкции fork() + различные модификации exec(). В режиме P_WAIT можно наблюдать приостановку выполнения father на время работы son, что соответствует введению в программу функции wait(). Режимы P_NOWAIT и P_NOWAITO аналогичны паре fork() + exec(). P_OVERLAY аналогичен просто функции exec().

Когда процесс-сын завершает свое выполнение, не дожидаясь завершения породившего его процесса. Для того, чтобы избавиться от зомби, есть несколько методов. Для их иллюстрации используем набор программ. father2.c и son2.c демонстрируют появление зомби.

Похожие материалы

Информация о работе