This is an old revision of the document!


Laborator 02: Servicii sistem și server basics

01. Investigarea dinamică a unui proces

a) strace

Comanda strace (system call trace) ne este utilă pentru a investiga ce apeluri de sistem efectuează o comandă dată și ce parametri folosește.

De exemplu, dacă dorim să urmărim apelurile de sistem efectuate de comanda ls folosim comanda

strace ls

Output-ul fiind destul de vast, ne preocupă să obținem doar informații despre fișierele deschide. Pentru aceasta folosim opțiunea -e a comenzii strace cu ajutorul căreia filtrăm tipuri de operații. În cazul de față folosim comanda

strace -e file ls

Observăm fișierele deschise.

Pentru a vedea diferența între comenzile ls și ls -l folosim comanda

strace -e file ls -l

Observăm că acum deschise și fișiere precum /etc/passwd și /etc/group pentru a determina username-ul și grupul aferent UID-ului și GID-ului din fișier.

b) Informații despre rețea

Comanda

netstat -s

afișează informații statistice despre pachetele sistemului. Ne interesează să știm de unde obține comanda respectivă informațiile.

Rulați comanda

strace -e open netstat -s

pentru a afla ce fișiere deschide comanda la rulare.

Care fișier este citit pentru a afla informații despre pachetele primite (packets received)? Vizualizați acel fișier (luați-o pe încercate).

c) Atașarea la un proces

strace permite investigarea unui proces aflat deja în rulare. Numim acest lucru atașarea la un proces. Putem astfel investiga apelurile de sistem efectuate de un proces aflat în rulare și diagnostica anumite probleme ale acestuia. Pentru a ne putea atașa la un proces avem nevoie de PID-ul acestuia.

Deschideți două tab-uri de terminal (adică să aveți două deschise; dacă aveți deja unul mai deschideți încă unul).

Pentru a deschide un tab nou de terminal în GNOME Terminal puteți folosi combinația de taste Ctrl+Shift+t.

Într-unul dintre tab-uri aflați PID-ul procesului curent (a shell-ului) folosind comanda

echo $$

Pentru a investiga shell-ul, din celălalt tab folosim comanda

strace -p <PID>

unde <PID> este PID-ul shell-ului determinat mai sus.

Acum dacă în celălalt shell rulăm comenzi vom vedea ce se întâmplă în cadrul shell-ului.

Observăm că se folosește apelul de sistem clone pentru a crea un nou proces, dar nu apare apelul de sistem execve care înlocuiește imaginea de proces. Pentru a vedea aceste apeluri de sistem trebuie să precizăm comenzii strace să investigheze și procesele copil folosind opțiunea -f (de la follow children). Astfel, vom putea investiga folosind comanda

strace -f -p <PID>

Dacă dorim să vedem doar operațiile cu procese și fișiere, de exemplu, vom folosi pentru investigație comanda

strace -f -e process,file -p <PID>

02. Demonizarea proceselor

a) Procese detașate de terminal

Sunt cazuri în care dorim să pornim procese detașate de terminal. Adică după pornirea procesului să închidem terminalul și procesul să nu fie “omorât” ci să își încheie execuția. Aceste procese sunt echivalente unor procese daemon.

Pentru a detașa un proces de un terminal se folosesc comenzi precum nohup, dtach și disown.

Folosiți comanda wget pentru a descărca fișierul .torrent de aici.

b) disown

Porniți un proces BitTorrent folosind comanda:

btdownloadheadless lin-prog.torrent

Dacă nu aveți btdownloadheadless instalat pe sistem instalați pachetul bittorrent

sudo apt-get install bittorrent

sau pachetul bittornado

sudo apt-get install bittornado

Transferați procesul pornit în starea de rulare în background. Detașați procesul de terminal folosind comanda disown. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda lsof pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error.

Apoi încheiați execuția acelui proces.

c) nohup

Folosiți comanda nohup pentru a crea un proces BitTorrent precum cel de mai sus, detașat de terminal. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda lsof pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error.

Trimiteți un semnal procesului pentru a-i încheia execuția și apoi reporniți-l sub nohup astfel încât ieșirea standard (standard output, stdout) să fie redirectată la /dev/null iar ieșirea de eroare standard (standard error, stderr) să fie redirectată în fișierul err.log. Investigați cu lsof unde pointează descriptorii standard ai procesului.

gsr/laboratoare/laborator-02.1476883744.txt.gz · Last modified: 2016/10/19 16:29 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0