Table of Contents

3. Procese, thread-uri și memorie

Acțiunile sunt executate la nivelul sistemului de fișiere prin procese. Rularea unei comenzi înseamnă crearea unui proces în sistemul de operare, proces care execută acțiunea indicată de executabilul din care a luat naștere. Procesele sunt entități active care consumă resurse la nivelul sistemului de operare, cele mai importante fiind procesor, memorie și diverse forme de input/output.

Subiecte abordate

Best practices

Utilitare folosite

Resurse utile

Descărcați arhiva de la adresa http://swarm.cs.pub.ro/~razvan/tmp/packages.zip. Copiați-o în mașina virtuală, decomprimați-o și instalați pachetele din cadrul acesteia.

După ce ați decomprimați arhiva instalați pachetele folosind comezi precum

sudo dpkg -i sysstat_11.0.1-1_i386.deb

Exerciții

Demo: Folosirea eficientă a shell-ului

Folosirea scurtăturilor din biblioteca readline

Folosirea Alt+. (sau $_)

Folosirea istoriei (Ctrl+r, !!)

Demo: Lucru cu procese

Afișați apoi lista proceselor tuturor utilizatorilor.

Obțineți o listare arborescentă a proceselor folosind comanda pstree și apoi obțineți o listare similară (arborescentă) folosind comanda ps. (Indiciu: Căutați după șirul forest în pagina de manual a comenzii ps).

Afisați toate procesele care nu apartin utilizatorului root. (Indiciu: Căutați în pagina de manual după șirul negate)

Sortați procesele de mai sus în ordinea inversă a memoriei RAM consumate (RSS – resident set size). Adică cele mai consumatoare de memorie procese la început.

Din procesele sortate rețineți doar primele 5 intrări. (Indiciu: Folosiți opțiunea --sort a comenzii ps.

Afișare procese

Dorim să afișăm anumite procese într-o anumită ordine.

Folosiți ps cu opțiunea corectă pentru a afișa procesele care aparțin utilizatorului training. Căutați în pagina de manual după șirul user.

Pentru procesele de mai sus afișați PID-ul, comanda completă (cale completă cu parametri), timpul de rulare pe procesor, memoria RAM consumată (RSS – resident set size). Pentru a selecta doar anumite atribute ale unui proces folosiți comanda ps cu parametrul -o urmat de opțiunile specifice; urmăriți și pagina de manual.

Afișați cele mai consumatoare de memorie 5 procese din sistem care nu aparțin utilizatorului root.

Pentru afișarea de mai sus, folosiți opțiunea de ascundere a header-ului în afișarea comenzii ps.

Afisați pentru toate procesele utilizatorului training următoarele atribute: pid, ppid, niceness-ul, comanda cu ajutorul căreia a fost lansat procesul, numărul de fire de execuție (thread-uri) din procesul respectiv. Pentru a găsi numărul de fire de execuție (thread-uri) din procesul respectiv, căutați după șirul number în pagina de manual a comenzii ps.

Procesele unui utilizator

Dorim să lucrăm cu grupuri de procese care țin de un utilizator.

Pe un tab nou de terminal adăugăm utilizatorul ana folosind comenzile

$ sudo su
# adduser ana
[...]
# exit            # sau puteti folosi combinatia de taste Ctrl+d
$

În acel tab nou ne autentificăm ca utilizatorul ana folosind comanda

$ su - ana

În cel nou tab, din contul utilizatorului ana, porniți în background mai multe procese: sleep, emacs, gedit.

Din primul tab, folosiți, ca root, pkill pentru o încheia execuția proceselor utilizatorului ana; adică rulați sudo pkill … (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL ca să fie garantată încheierea execuției.

Procesele unui terminal

Pe un tab nou de terminal porniți în background procese ca utilizatorul root, student și ana.

În acel tab aflăm care este identificatorul terminalului curent folosind comanda

$ tty

Din primul tab, folosiți, ca root, pkill pentru o încheia execuția proceselor de pe al doilea terminal; adică rulați sudo pkill … (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL ca să fie garantată încheierea execuției.

Demo: Investigarea unui proces

Folosirea lsof pentru a investiga redirectare și pipe din cadrul unui proces.

Folosirea time pentru a afla informații legate de încheierea rulării unui proces.

Folosirea nohup

Ne propunem să pornim un tracker de BitTorrent în background, folosind nohup. Pentru început porniți tracker-ul în foreground ca să acomodați cu modul său de pornire.

Pentru pornirea tracker-ului folosiți comanda

bttrack --dfile bttrack.dfile --port 12345

Închideți tracker-ul (folosind Ctrl+c) și porniți-l în background folosind comanda nohup. Redirectați output-ul tracker-ului în fișierul cu numele bttrack.log.

Închideți shell-ul din care ați lansat tracker-ul. Afișați fișierele deschise de procesul tracker folosind comanda lsof.

Listați serviciile sistemului și verificați că procesul tracker este pornit folosind comanda

netstat -tlpn

Folosirea tmux

Porniți într-un ecran tmux un tracker BitTorrent, un server HTTP Python, un editor Vim sau Emacs și încă un ecran pentru comenzi.

Pentru pornirea tmux folosiți comanda

tmux

Pentru a deschide ecrane noi în tmux folosiți combinația de taste Ctrl+b și apoi separat c. Pentru a tranzita între ferestre folosiți combinațiile de taste Ctrl+b urmat de n și Ctrl+b urmat de p. Pentru a închide un ecran închideți shell-ul folosind Ctrl+d sau exit sau logout.

Pentru a vă detașa de tmux folosiți combinația de taste Ctrl+b urmat de d. Pentru a vă reatașa la tmux folosiți comanda

tmux attach

Pentru a porni un server HTTP Python folosiți comanda

python -m SimpleHTTPServer

Folosirea supervisord

Folosiți supervisord pentru a porni un tracker de BitTorrent cu ajutorul comenzii bttrack.