WOJSKOWA AKADEMIA TECHNICZNA
LABORATORIUM SYSTEMÓW OPERACYJNYCH Laboratorium nr 5 |
---|
Grupa |
Lp. |
1. |
Zadanie nr 1.
Od prowadzącego ćwiczenia otrzymaliśmy kod programu, którego działanie mieliśmy zilustrować w terminalu w postaci wykonania tego programu jak i za pomocą funkcji pstree –u „username” –p.
Kod programu program1.c
#include <sys/types.h>
#include <unistd.h>
int main(void){
printf("Macierzysty > PID: %d\n", getpid());
if(fork()==0){//P1
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
if(fork()==0){//P2
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P3
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P4
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
if(fork()==0){//P5
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
return 0;
}
Wynik wykonania skompilowanego programu za pomocą gcc:
Wynik działania funkcji pstree:
Zadanie nr 2.
Na podstawie podanego niżej diagramu procesów napisać program tworzący drzewo procesów.
Kod programu program2.c
#include <sys/types.h>
#include <unistd.h>
int main(void){
printf("Macierzysty > PID: %d\n", getpid());
if(fork()==0){//P1
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P4
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P6
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
if(fork()==0){//P5
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
if(fork()==0){//P2
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P7
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P9
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
if(fork()==0){//P8
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
if(fork()==0){//P3
printf("PID: %d, PPID: %d\n", getpid(), getppid());
if(fork()==0){//P10
printf("PID: %d, PPID: %d\n", getpid(), getppid());
sleep(120);
return 0;
}
sleep(120);
return 0;
}
return 0;
}
Wynik skompilowanego programu przez gcc:
Wynik funkcji pstree:
Podsumowanie.
Podczas tego ćwiczenia laboratoryjnego mieliśmy możliwość praktycznego wykorzystania wiedzy dotyczącej tworzenia nowych procesów, jak również grupowania ich w drzewa.
Dzięki użyciu funkcji pstree uzyskujemy obraz zrealizowanego przez nas drzewa w sposób graficzny, który jest dużo bardziej czytelny niż wypisane przez poszczególne programy listy kolejnych ID procesów. Używając tej funkcji możemy szybciej sprawdzić czy zadane nam drzewo zostało wykonane poprawnie.
Kompilując programy przez gcc wystąpił warning (tj. incompatibile implicite declaration of butli-in function ‘printf’), jednak nie wpływał on na wykonywanie owych programów – wykonywane były one poprawnie.
Zadania, które wyznaczył prowadzący zostały zrealizowane pomyślnie.