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