Systemy operacyjne materiaªy ¢wiczeniowe
Studia dzienne PJWSTK
WICZENIA IX
Zarz¡dzanie procesami c.d.
Polecenie pobrania identykatora procesu
• wymagane biblioteki
#include <unistd.h>
#include <sys/types.h>
• polecenie getpid(...)
pid_t getpid(void);
gdzie
◦ polecenie zwraca identykator wykonywanego procesu
• polecenie getppid(...)
pid_t getppid(void);
gdzie
◦ polecenie zwraca identykator procesu macierzystego aktualnie wykonywanego procesu Polecenia oczekiwania na zako«czenie procesu
• wymagane biblioteki
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
• polecenie wait(...)
pid_t wait(int *stat_loc);
gdzie
◦ proces wykonywany wstrzymuje dziaªanie dopóki dowolny proces potomny nie zako«czy si¦
◦ int *stat_loc wska¹nik na zmienn¡ typu int, w której zapami¦tana zostaje informacja zwrotna z zako«czonego procesu potomnego, przewa»nie *stat_loc==NULL
◦ makra sprawdzaj¡ce informacj¦ zwrotn¡
∗ WIFEXITED(*stat_loc)==0 proces potomny zako«czyª si¦ niepoprawnie
∗ WIFEXITED(*stat_loc)!=0 proces potomny zako«czyª si¦ poprawnie
∗ WEXITSTATUS(*stat_loc)==x je»eli WIFEXITED(*stat_loc)!=0, to x jest parametrem zwracanym przez proces potomny (return x w funkcji main() albo exit(x) w innym miejscu procesu)
◦ w przypadku sukcesu polecenie zwraca identykator procesu potomnego, który si¦ zako«czyª, w p.p. (-1)
• polecenie waitpid(...)
pid_t waitpid(pid_t pid,int *stat_loc,int options);
1
c
° Paweª Rembelski
Systemy operacyjne materiaªy ¢wiczeniowe
Studia dzienne PJWSTK
gdzie
◦ proces wykonywany wstrzymuje dziaªanie dopóki konkretny proces potomny nie zako«czy si¦
◦ pid_t pid identykator procesu potomnego, na którego koniec ma oczekiwa¢ aktualnie wykonywany proces
◦ int *stat_loc wska¹nik na zmienn¡ typu int, w której zapami¦tana zostaje informacja zwrotna z zako«czonego procesu potomnego, przewa»nie *stat_loc==NULL
◦ makra sprawdzaj¡ce informacj¦ zwrotn¡
∗ WIFEXITED(*stat_loc)==0 proces potomny zako«czyª si¦ niepoprawnie
∗ WIFEXITED(*stat_loc)!=0 proces potomny zako«czyª si¦ poprawnie
∗ WEXITSTATUS(*stat_loc)==x je»eli WIFEXITED(*stat_loc)!=0, to x jest parametrem zwracanym przez proces potomny (return x w funkcji main() albo exit(x) w innym miejscu procesu)
◦ int options tryb oczekiwania, najcz¦±ciej options==0 (oczekiwanie z zawieszeniem) albo options==WNOHANG (oczekiwanie bez zawieszenia)
◦ w przypadku sukcesu polecenie zwraca identykator procesu potomnego, który si¦ zako«czyª, w p.p. (-1)
Zadania
1. Napisz program, który:
(a) wypisuje Bede procesem macierzystym,
(b) tworzy proces potomny,
(c) proces potomny wypisuje Jestem procesem potomnym,
(d) proces macierzysty wypisuje Mam proces potomny, czeka na zako«czenie procesu potomnego, po czym wypisuje Proces potomny sie skonczyl.
2. Napisz program który tworzy ci¡g procesów potomnych p 1 , p 2 , . . . , pn taki, »e identykatory procesów p 1 , p 2 , . . . , pn− 1 i procesu pn s¡ odpowiednio liczbami zªo»onymi oraz liczb¡ pierwsz¡.
3. Napisz program tworz¡cy lini¦ n procesów, gdzie ka»dy proces potomny jest przodkiem nast¦pnego procesu. Ka»dy i-ty proces macierzysty powinien na pocz¡tku swojego dziaªania napisa¢ Proces nr. i wystartowal, poczeka¢ na zako«czenie swojego procesu potomnego i napisa¢ Proces nr.
i zakonczyl sie (parametr n powinien by¢ wczytywany w procesie gªównym tj. pierwszym procesie na li±cie procesów).
4. Napisz program tworz¡cy drzewo binarne procesów, gª¦boko±ci h, gdzie ka»dy proces potomny jest przodkiem procesu-ojca. Ka»dy i-ty proces macierzysty powinien na pocz¡tku swojego dziaªania napisa¢ Proces nr. i wystartowal, poczeka¢ na zako«czenie swoich dwóch procesów potomnych i napisa¢ Proces nr. i zakonczyl sie (parametr h powinien by¢ wczytywany w procesie gªównym tj. procesie-korzeniu drzewa procesów).
2
c
° Paweª Rembelski