Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра автоматики и вычислительной техники
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 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 демонстрируют появление зомби.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.