Upravljanje procesima
Upravljanje poslovima ljuske
-
dvije vrste naredbi, obzirom na vrijeme izvođenja
- naredbe koje se izvode ograničeno vrijeme i same prekidaju izvođenje (
ls,pwd,rm,cp,mv, ...) - naredbe koje se izvode do prekida izvođenja od strane korisnika (
man,less,tail -f;catbez argumenata,greps jednim argumentom, ...)
- naredbe koje se izvode ograničeno vrijeme i same prekidaju izvođenje (
-
^Zposao koji se trenutno izvodi zaustavlja i baca u background- omogućuje baratanje sa više poslova u jednom terminalu
-
jobsispisuje popis pokrenutih poslova %noznaka posao s brojemn%+označava posao koji se prethodno izvodio%-označava posao koji se pretprethodno izvodiofgvraća posao s danim brojem u foregroundbgnastavlja izvođenje posla s danim brojem u backgroundu
Zadatak
- Pokrenite, a zatim zaustavite u izvođenju i stavite u background, redom
catbez argumenata,greps jednim argumentom itail -f .bashrc. - Vratite u foreground posao s rednim brojem 2.
- Prekinite izvođenje posla broj 1.
- Saznajte može li naredba
jobsizlistati i broj procesa. (Uputa:man jobsne postoji; vidite možete li na neki način pogrešno upotrijebiti naredbu da vam baci grešku i na ekran ispiše pomoć kod korištenja.)
Dodatni zadatak
- Pokrenite sljedeću naredbu:
emacs -nw dat1.txt &. Što se dogodilo? - Probajte tipkati neki tekst. Što se događa?
- Vratite pokrenuti Emacs u foreground. Što uočavate?
Upravljanje procesima operacijskog sustava
- proces = program u izvođenju
-
proces != posao
- svaki posao je proces, ali obrat ne vrijedi
-
identifikator procesa (engl. process ID, PID) je broj koji jednoznačno određuje proces na sustavu
-
psprikazuje procese trenutnog korisnika koji se izvode na trenutnom terminalu- podržava SysV, BSD i GNU stil naredbi; mi ćemo koristiti BSD stil naredbi
-
ps aprikazuje procese trenutnog korisnika i drugih korisnika, uključujući korisnika root -
ps xprikazuje procese sa i bez terminala- proces bez terminala ima vrijednost
?u odgovarajućem stupcu - zanimljiv primjer procesa bez terminala su procesi koji nastaju pokretanjem aplikacija iz grafičkog sučelja
- proces bez terminala ima vrijednost
-
ps uje oblik ispisa prilagođen za korisnikeudolazi od user-oriented; pored PID-a, vremena izvođenja i naredbe prikazuje i vrijeme početka izvođenja, stanje procesa, zauzeće memorije i procesora
-
ps axudaje ispis svih procesa svih korisnika uz nešto više detalja -
ps fispisuje šumu procesafdolazi od forest- šuma procesa podrazumijeva više stabala procesa
-
pstreeradi na sličan način kaops f- svim procesima koji nemaju neposrednog roditelja prikazuje se
initkao roditelj (PID roditelja je 1), pa postoji jedan korijen -- sada se ne radi se o šumi, već o stablu
- svim procesima koji nemaju neposrednog roditelja prikazuje se
-
pstree -pjedan roditelj za sve procese -
init (naredba
init) pokreće određene servise kod pokretanja operacijskog sustava, o čemu više govorimo kasnije- PID procesa je 1
-
[kthreadd]pokreće procesne niti jezgre operacijskog sustava- PID procesa je 2
- više informacija ima u man stranicama
kthread_bind(9),kthread_run(9),kthread_stop(9),kthread_create(9),kthread_should_stop(9)
Zadatak
Pronađite u popisu procesa python. (Naravno, to će biti moguće samo ako je sustav prethodno pripremljen za rješavanje zadatka.)
- Otkrijte ime ili user ID korisnika kojem proces pripada.
- Otkrijte PID roditelja tog procesa.
Signali
-
signal se koristi za obavještavanje procesa ili procesne niti o nekom događaju
- svaki signal ima svoj jedinstveni naziv tj. kraticu koja počinje sa
SIG(npr.SIGINT), te odgovarajući broj - po primitku signala proces reagira na određeni način
- svaki signal ima svoj jedinstveni naziv tj. kraticu koja počinje sa
-
kill -ldaje popis signala- dva smo već koristili: Ctrl+C šalje signal
2) SIGINT, a Ctrl+Z signal20) SIGTSTP -
dva signala koja proces ne može uhvatiti su:
9) SIGKILL-- odmah prekida izvođenje procesa19) SIGSTOP-- zaustavlja proces u izvođenju; stavlja proces u background
-
ostale signale proces hvata korištenjem funkcije
signal()definirane u zaglavljusignal.hiz standardne biblioteke jezika C (C++ varijanta jecsignal); detaljnije na Wikipedijinoj stranici o signal.h
- dva smo već koristili: Ctrl+C šalje signal
-
kill -<n> PIDje naredba za slanje signalanprocesu PID- zadan je signal broj 15, SIGTERM, koji traži od procesa da prekine s izvođenjem
-
killall -<n> ime_naredbešalje signalnsvim pokrenutim instancama naredbe sa zadanim imenom (koje može biti i regularni izraz)
Zadatak
- Pokrenite dva terminala u kojima ste povezani na poslužitelj.
- U jednom terminalu pokrenite
less .bashrc, a iz drugog pošaljite signal 15 tom procesu. - Ponovno pokrenite
less .bashrc, ali mu sada pošaljite signal 9. Uočite razliku. Objasnite zašto ne možete koristiti PID iz prethodnog dijela zadatka. - Pokušajte poslati signal 9 ili 15 procesu
pythoniz prethodnog zadatka, a onda objasnite zašto to ne možete.
Zadatak
- Pokrenite tri terminala. U dva terminala pokrenite
emacs. U barem jednom od njih počnite pisati nešto, ali nemojte to spremiti. - Pošaljite svim pokrenutim
emacs-ima signal 15. Objasnite zbog čega javlja da nekima od njih to nije moguće učiniti. - Usporedite to sa situacijom kada pošaljete signal 9. Što javlja
emacskod prekida izvođenja u jednom, a što u drugom slučaju?
Niceness i prioritet izvođenja
-
niceness određuje koliko će procesi često doći na red za izvođenje (mali vremenski intervali)
- vrijednost se kreće od -20 (češće dolazi na red) do 19 (rjeđe dolazi na red)
- korisnici osim
rootkorisnika mogu postaviti vrijednosti od 0 do 19 (zadana postavka, regulira je PAM u/etc/security/limits.conf) - niceness != prioritet; sustav dodjeljuje prioritet na temelju nicenessa koji zadaje korisnik; najčešće tako da pribraja niceness na zadani prioritet procesa, ali ne mora biti tako
-
renicemijenja niceness u odnosu na trenutni, radi na već pokrenutim procesima nicemijenja niceness u odnosu na zadani, koristi se kod pokretanja procesaioniceza razliku od nicenessa, koji kontrolira prioritet kod redanja za obradu od strane procesora, ioniceness kontrolira prioritet redanja za korištenje ulaza i izlaza (primjerice, čitanje i zapisivanje na diskove)
Zadatak
Pokrenite dva terminala.
- U jednom terminalu pokrenite
sleep 30ss nicenessom postavljenim na 10. - Promijenite niceness tog procesa na 17.
Napomena: Ovisno o sigurnosnim ograničenjima sustava na kojem radite, obični korisnici ne mogu ni postavljati niceness na nižu vrijednost od one koju su prethodno postavili. Ovaj zadatak je zadan tako da uvijek bude rješiv.
Info
Prema Wikipediji:
The name "nice" comes from the fact that the program's purpose is to modify a process niceness value. The true priority, used to decide how much cpu time to concede to each process, is calculated by the kernel process scheduler from a combination of the different processes niceness values and other data, such as the amount of I/O done by each process.
The name "niceness" originates from the idea that a process with a higher niceness value is "nicer" to other processes in the system, as it allows the other processes more cpu time, by having a lower priority (and therefore a higher niceness) itself.
-
topsluži za nadgledanje procesa u realnom vremenu koji se izvode; na vrhu popisa prikazuje procese koji troše najviše procesorskog vremena (odatle i naziv)- funkcionalnost
ps-a,kill-a irenice-a - kontrolira se uz pomoć tipkovnice (slično kao
less) kkill; traži se PID i broj ili ime signalarrenice; traži se PID i nicenessuprikaži samo procese navedenog korisnikahprikaz pomoćizuključuje boju kod prikazaBuključuje bold kod prikaza; unosi se sa Shift+B
- funkcionalnost
-
htopjetopna steroidima- na većini distribucija nije u zadanoj instalaciji, ali ima kultni status među tzv. hardcore geekovima (spominjemo radi potpunosti)
Zadatak
Pokrenite tri terminala.
- U jednom terminalu pokrenite
cat, a u drugomgreps jednim argumentom. - U
top-u, ograničite pogled samo na svoje procese. Poredajte ih po zauzeću memorije. - Pokušajte iz
top-a poslati signal 9 ili 15 procesupythoniz prethodnog zadatka. Ima li razlike?
Pitanja za ponavljanje
- Postoji li razlika između poslova i procesa?
- Kako dijelimo naredbe s obzirom na vrijeme njihova izvođenja? Dajte po jedan primjer za svaku skupinu.
- Čime su identificirani poslovi, a čime procesi?
- Prisjetite se naredbi za manipulaciju poslovima.
- Kako i zbog čega se procesi "bacaju" na izvođenje u pozadinu?
- Prisjetite se parametara koji se koriste sa naredbom
psi njihova značenja. - Što je stablo procesa i kako ono dokazuje da je
initzaista proces koji pokreće sve ostale procese? - Objasnite pojam signala i kako funkcioniraju.
- Prisjetite se signala koje smo radili, pa objasnite razliku između onih koji se daju i onih koji se ne daju uloviti.
- Objasnite funkcionalnost naredbe
killall. - Što je niceness, kada kažemo da je neki proces više "nice" nego neki drugi?
- Obrazložite razliku između niceness-a i prioriteta nekog procesa.
- Zbog čega je
topvrlo moćan alat, koje su njegove mogućnosti?
Author: Vedran Miletić, Vanja Slavuj, Sanja Pavkov