= Administrarea proceselor =
[[https://docs.google.com/presentation/d/1ugVHI-t18A_9rTiPNCKgCgKF5tdrvvDwlSAQlNzvTwQ/pub?start=false&loop=false&delayms=3000|Slide-uri de prezentare]]
== Tutorial (1) ==
=== Informații despre procese ===
Deschideți un terminal.
* Rulați comanda ''ps''.
** Comanda afișează informații despre două procese:
*** ''ps'' - comanda tocmai rulată
*** ''bash'' - interpretorul de comenzi care rulează în terminal
**** Rețineți ''PID''-ul procesului ''bash''.
* Rulați încă o dată comanda ''ps''.
** Ce s-a schimbat în coloana **PID**. De ce?
* Rulați comanda ''pidof bash''.
** Ce observați?
** Rulați comanda ''pidof init''.
*** Procesul cu PID-ul 1 este rădăcina ierarhiei de procese.
* Rulați comanda ''ps -e''.
** Ce observați?
** Pentru vizualizarea întregului output puteți folosi bara din dreapta sau Shift-PageUp/Shift-PageDown.
** Căutați în pagina de manual pentru a afla ce face parametrul ''-e''.
* Rulați comanda ''ps -eF''.
** Ce observați?
** Căutați în pagina de manual pentru a afla ce face parametrul ''-F''.
** Observați coloana ''PPID''.
*** Câte linii au același ''PPID''. De ce?
* Rulați comanda ''pstree''.
** Se observă mult mai ușor structura ierarhică a proceselor.
*** Navigați mai ușor cu Shift-PageUp/Shift-PageDown.
* Rulați comanda ''top''.
** Apăsați tasta ''h'' pentru a afla mai multe informații despre cum puteți interacționa cu utilitarul ''top''.
*** Spre exemplu, apăsați tasta ''F'' pentru a selecta coloana după care doriți să sortați informația.
**** ''A'' pentru a selecta după ''PID''.
** ''top'' afișează diverse informații.
*** câmpul ''CPU'' arată cât ocupă din procesor
*** câmpul ''TIME'' arată timpul total efectiv de rulare
* Rulați comanda ''htop''.
** Utilitarul este asemănător ''top'' însă mult mai interactiv.
*** Interacțiunea poate fi făcută și cu mouse-ul.
== Tutorial (2) ==
=== Informații despre procese din sistemul de fișiere ===
Directorul ''/proc'' conține informații despre toate procesele din sistem.
* Folosiți comanda ''tree'' pentru a afișa structura directorului ''/proc''.
* Rulați comanda ''pidof bash''.
** Ce PID are interpretorul curent?
* Navigați în directorul /proc/$PID, unde $PID este PID-ul anterior.
** Alternativ, puteți folosi ''cd /proc/`pidof bash`''.
* Afișați în format lung conținutul directorului curent.
** Ce reprezintă fișierul ''exe''?
** Afișați conținutul fișierului ''limits''.
*** Ce observați?
Într-un alt terminal, deschideți editorul ''nano''.
* Reveniți în primul terminal și aflați ''PID''-ul procesului.
* Navigați în directorul din ierarhia '/proc' asociat.
* Listați conținutul directorului.
** Ce dimensiune ocupă acest director?
*** Dimensiunea spațiului ocupat de un director o aflați folosind comanda ''du -hs /path/to/folder'' unde ''/path/to/folder'' este calea către director; calea poate fi ''.'' pentru a afla spațiul ocupat de directorul curent.
* Închideți editorul ''nano''.
* Listați conținutul directorului.
** Ce observați?
=== Starea proceselor ===
* Rulați comanda ''yes a''.
** Încercați să tastați o comandă. (exemplu ''ls'')
** Pentru a opri comanda apăsați ''Ctrl-c''
* Rulați comanda ''pidof yes''.
** Ce observați?
* Rulați comanda ''yes b''.
** Apăsați ''Ctrl-z''.
* Rulați comanda ''pidof yes''.
** Ce observați?
* Rulați din nou comanda ''yes''. Apăsați ''Ctrl-z''. Apoi rulați ''pidof yes''.
** Ce observați?
* Rulați comanda ''jobs''.
Pentru a aduce un proces din starea "Stopped" în "Running" există două posibilități:
* Rulați comanda ''fg''.
** Încercați să opriți output-ul prin apăsarea ''Ctrl-c''.
*** Ce observați?
* Rulați comanda ''jobs''.
* Rulați comanda ''bg''.
** Încercați să opriți output-ul prin apăsarea ''Ctrl-c''.
*** Ce observați?
*** Procesul rulează în background. Utilizatorul are acces la terminal, însă output-ul este prea rapid pentru a fi vizibil.
** Pentru a fi siguri că nu aveți altceva tastat, apăsați ''enter''. Apoi apăsați ''fg'' și ''enter''.
*** Procesul este adus în foreground.
**** Încercați să opriți output-ul prin apăsarea ''Ctrl-c''.
*** Ce observați?
Rulați comanda ''xeyes''.
* Procesul lansat rulează în foreground.
* Rulați ''Ctrl-Z'' în terminal.
** Observați că aplicația s-a oprit.
* Rulați comanda ''jobs''.
* Rulați comanda ''bg'' în terminal.
** Aplicația a început să funcționeze din nou, iar utilizatorul are acces la terminal.
* Închideți aplicația.
* Rulați comanda ''xeyes &''
** Procesul rulează în background.
** Rulați comanda ''jobs''.
*** Ce observați?
=== Semnale ===
* Rulați comanda ''yes a''.
** Apăsați ''Ctrl-z''.
** Rulați ''jobs''.
*** Ce observați?
Procesul a fosst suspendat
* Rulați comanda ''fg''.
** Apăsați ''Ctrl-c''.
*** Ce observați?
Procesul a fost pornit în foreground. Interacțiunea cu acesta este permisă.
Ctrl-c omoară procesul.
* Rulați comanda ''yes bored''.
** Deschideți un alt terminal. Aflați ''PID-ul'' procesului.
* Rulați comanda ''kill -STOP $PID'', unde $PID este ''PID''-ul aflat anterior
** Ce observați că s-a întâmplat cu procesul ''yes''?
Procesul a fost suspendat. Similar cu Ctrl-z
* Rulați comanda ''kill -l''.
** Repetați experimentul și înlocuiți ''STOP'' cu numărul corespunzător aflat.
*** Pentru al doilea experiement, evident ''PID-ul'' nu va mai fi același.
Același lucru.
În momentul în care un terminal este închis, acesta transmite tuturor proceselor copil semnalul ''SIGHUP''.
== Exerciții ==
Folosind comanda ''ps'', încercați să afișați doar câmpurile ''PID'' și ''PPID'' ale tuturor proceselor din sistem.
Filtrați toate procesele din sistem după memoria utilizată (hint: ''top'')
Aflați care este load-ul sistemului folosind comanda ''top''. Ce alte informații puteți afla asemănător?
Folosind comanda ''yes'', faceți în așa fel încât output-ul să arate alternativ literele ''a'' și ''b''. Indiciu: **background**
Rulați comanda ''gedit''. Închideți terminal-ul. Ce s-a întâmplat?
* Folosiți comanda ''nohup'' astfel încât la închiderea terminalului, editorul text să nu se închidă.