This shows you the differences between two versions of the page.
|
uso:laboratoare:ac:laborator-04:run [2020/10/27 18:47] 127.0.0.1 external edit |
uso:laboratoare:ac:laborator-04:run [2021/10/28 20:59] (current) liza_elena.babu [Investigarea proceselor] |
||
|---|---|---|---|
| Line 26: | Line 26: | ||
| Un sistem de operare are de obicei mai multe aplicații care rulează, deci mai multe procese. Prea multe procese pot duce la o încărcare prea mare a sistemului, încetinind sau împiedicând funcționarea acestuia. Anumite procese pot consuma excesiv resurse afectând celelalte procese. De aceea, este util să investigăm procesele unui sistem și consumul de resurse al acestora. | Un sistem de operare are de obicei mai multe aplicații care rulează, deci mai multe procese. Prea multe procese pot duce la o încărcare prea mare a sistemului, încetinind sau împiedicând funcționarea acestuia. Anumite procese pot consuma excesiv resurse afectând celelalte procese. De aceea, este util să investigăm procesele unui sistem și consumul de resurse al acestora. | ||
| + | Un proces este creat de un alt proces. De exemplu, mai sus, procesul ''%%which%%'' a fost creat dintr-un proces shell (''%%bash%%''). Procesul shell a fost, la rândul său, creat de un alt proces. Un proces are un proces părinte; un proces poate avea mai multe procese copil. Procesele sunt, așadar, parte dintr-o ierarhie. | ||
| + | |||
| + | În vârful ierarhiei de procese este procesul numit clasic ''%%init%%''. În listarea de mai sus vedem că procesul din vârful ierarhiei este ''%%systemd%%''. ''%%systemd%%''((https://freedesktop.org/wiki/Software/systemd/ | ||
| + | )) este implementarea de ''%%init%%'' prezentă în cea mai mare parte a distribuțiilor Linux curente((Procesul ''%%init%%'' va exista în permanență în vârful ierarhiei de procese, indiferent de faptul că se va numi ''%%systemd%%'', ''%%init%%'', ''%%upstart%%'' sau altfel. | ||
| + | )). | ||
| ==== Listarea proceselor ==== | ==== Listarea proceselor ==== | ||
| Line 57: | Line 62: | ||
| [...] | [...] | ||
| </code> | </code> | ||
| - | ==== Ierarhia proceselor ==== | ||
| - | |||
| - | Un proces este creat de un alt proces. De exemplu, mai sus, procesul ''%%ps%%'' a fost creat dintr-un proces shell (''%%bash%%''). Procesul shell a fost, la rândul său, creat de un alt proces. Un proces are un proces părinte; un proces poate avea mai multe procese copil. Procesele sunt, așadar, parte dintr-o ierarhie. | ||
| - | |||
| - | Pentru a vizualiza ierarhia de procese, folosim utilitarul ''%%pstree%%'': | ||
| - | |||
| - | <code bash> | ||
| - | student@uso:~$ pstree | ||
| - | systemd-+-ModemManager---2*[{ModemManager}] | ||
| - | |-NetworkManager-+-2*[dhclient] | ||
| - | | `-2*[{NetworkManager}] | ||
| - | [...] | ||
| - | |-acpid | ||
| - | |-avahi-daemon---avahi-daemon | ||
| - | |-boltd---2*[{boltd}] | ||
| - | |-colord---2*[{colord}] | ||
| - | |-cron | ||
| - | [...] | ||
| - | |-systemd-+-(sd-pam) | ||
| - | | |-gnome-terminal--+-bash | ||
| - | | | `-3*[{gnome-terminal-}] | ||
| - | [...] | ||
| - | </code> | ||
| - | În vârful ierarhiei de procese este procesul numit clasic ''%%init%%''. În listarea de mai sus vedem că procesul din vârful ierarhiei este ''%%systemd%%''. ''%%systemd%%''((https://freedesktop.org/wiki/Software/systemd/ | ||
| - | )) este implementarea de ''%%init%%'' prezentă în cea mai mare parte a distribuțiilor Linux curente((Procesul ''%%init%%'' va exista în permanență în vârful ierarhiei de procese, indiferent de faptul că se va numi ''%%systemd%%'', ''%%init%%'', ''%%upstart%%'' sau altfel. | ||
| - | )). | ||
| ==== Atributele proceselor ==== | ==== Atributele proceselor ==== | ||
| Line 190: | Line 169: | ||
| <code bash> | <code bash> | ||
| - | student@uso:~$ kill 9486 | + | student@uso:~$ kill -SIGKILL 9486 |
| </code> | </code> | ||
| Comanda ''%%kill%%'' primește ca argument PID-ul procesului de omorât, adică ''%%9486%%''. | Comanda ''%%kill%%'' primește ca argument PID-ul procesului de omorât, adică ''%%9486%%''. | ||
| Line 203: | Line 182: | ||
| În terminalul inițial, în care am rulat comanda ''%%sleep%%'', apare un mesaj care indică omorârea procesului: | În terminalul inițial, în care am rulat comanda ''%%sleep%%'', apare un mesaj care indică omorârea procesului: | ||
| - | |||
| - | <code bash> | ||
| - | student@uso:~$ sleep 60 | ||
| - | Terminated | ||
| - | </code> | ||
| - | === Folosirea semnalului SIGKILL === | ||
| - | |||
| - | În anumite situații, folosirea utilitarului ''%%kill%%'' nu duce la omorârea procesului țintă. În această situație, vom transmite procesului țintă semnalul ''%%SIGKILL%%'' care este garantat că va omorî procesul. Adică, amuzant spus, ''%%SIGKILL%%'' este o bombă nucleară, un glonț care trece prin vesta anti-glonț, cianură de potasiu. Astfel, dacă pornim pe un terminal un proces ''%%sleep%%'' la fel ca mai sus, în alt terminal vom omorî procesul folosind semnalul ''%%SIGKILL%%'' ca mai jos: | ||
| - | |||
| - | <code bash> | ||
| - | student@uso:~$ pidof sleep | ||
| - | 9834 | ||
| - | student@uso:~$ kill -KILL 9834 | ||
| - | student@uso:~$ pidof sleep | ||
| - | student@uso:~$ | ||
| - | </code> | ||
| - | Secvența de comenzi este similară secvenței anterioare cu excepția folosirii opțiunii ''%%-KILL%%'' la comanda ''%%kill%%'' care înseamnă trimiterea semnalului ''%%SIGKILL%%''. | ||
| - | |||
| - | Efectul este similar dar, pe terminalul în care am rulat comanda ''%%sleep%%'', apare un mesaj de forma: | ||
| <code bash> | <code bash> | ||
| Line 227: | Line 187: | ||
| Killed | Killed | ||
| </code> | </code> | ||
| - | Mesajul ''%%Killed%%'' este afișat atunci când un proces primește semnalul ''%%SIGKILL%%''. | ||
| ==== Exerciții: Oprirea proceselor ==== | ==== Exerciții: Oprirea proceselor ==== | ||