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 ==== |