40 0 356KB
Ministère de l'éducation, de la culture et de la recherche de la République de Moldova Université technique de Moldavie Faculté d’Ordinateur, Informatique et Microélectronique Filière francophone “Informatique”
SOMIPP
Travail pratique nr.5 Thème: Surveillance de processus
Effectué par l’étudiant(e) de gr FI-181 :
Bonta Alexandr
Vérifié par le professeur :
Colesnic Victor
Chișinau 2020
Scopul lucrării: modurile de obținere de informații despre rularea proceselor, despre resursele utilizate de procese, prezentarea rezultatelor în diverse forme. 1) Aflaţi numărul de procese inițiaţializate de utilizatorul user și introduceți într-un fișier perechea „PID: comanda” a proceselor inițializate. Afișați conținutul acestui fișier şi numărul de procese. ps -u sasa | awk '{print $1, ":", $4}' | cat > /home/sasa/lab5/ex1.txt cat /home/sasa/lab5/ex1.txt wc -l /home/sasa/lab5/ex1.txt
2) Afișați PID-ul procesului, ultimul lansat (cu timpul de lansare). ps -aux --sort +start_time | tail -n 4| awk 'NR==1{print $2, $9}'
3) Introduceți într-un fișier o listă cu PID-urile proceselor, pornite cu comenzile localizate în /sbin/. Afișați conținutul acest fișier. ps -aux | grep '/sbin/' | awk '{print $2}' | sed '$d' | cat > /home/sasa/lab5/ex3.txt cat /home/sasa/lab5/ex3.txt
4) Pentru fiecare proces, calculați diferența dintre memoria totală (statm: size) şi rezidentă (statm: resident) ale memoriei de proces (în pagini). Introduceți într-un fișier linii de tip „PID:diferența”, sortate în ordinea descrescătoare a acestor diferențe. Afișați conținutul acestui fișier. ps -aux | awk '{print $2, $5-$6}'c| sed '1d' | sort -nk2 | cat > /home/sasa/lab5/ex4.txt cat /home/sasa/lab5/ex4.txt
5) Pentru toate procesele înregistrate, la moment, în sistem, introduceți într-un fişier linii de tip ProcessID=PID:Parent_ProcessID=PPID: Average_Time=avg_atom. Preluați valorile PPID și PID din fișierele status, valoarea avg_atom(avg_atom=se.sum_exec_runtime/nr_switches) din fișierele sched care se află în subdirectoarele, cu nume ce corespund PID proceselor în directorul /proc. Sortați aceste linii conform identificatorilor proceselor părinte. Rezultatul sortării introduceți întrun fișier și afișați-l.
#!/bin/bash
status="" echo -e "" > /home/sasa/lab5/ex5.txt for pid in $(ps -A -o pid | tail -n +2) do file="/proc/"$pid"/status" file1="/proc/"$pid"/sched" ppid=$(grep -E -h -s -i "ppid" $file | grep -o "[0-9]\+") ################################################################################ se_sum_exec_runtime=$(grep -E -h -s -i "se.sum_exec_runtime" $file1 | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | cut -f1 -d".") nr_switches=$(grep -E -h -s -i "nr_switches" $file1 | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | cut -f1 -d".") ################################################################################ if [[ $ppid != "" ]] then if [[ $nr_switches != "" ]] then echo -e $status"ProcessID="$pid" : Parent_ProcessID="$ppid " : Average_time="$((se_sum_exec_runtime / nr_switches)) >> /home/sasa/lab5/ex5.txt #then echo -e $status"ProcessID="$pid" : Parent_ProcessID="$ppid " : se.sum_exec_runtime="$se_sum_exec_runtime " nr_switches="$nr_switches " " : Average_time="$ ((se_sum_exec_runtime / nr_switches)) >> /home/sasa/lab5/ex5.txt fi fi done echo "$(sort -t= -k3 -n /home/sasa/lab5/ex5.txt)" > /home/sasa/lab5/ex5.txt cat /home/sasa/lab5/ex5.txt exit 0
6) În fișierul obținut în 5, după fiecare grup de înregistrări cu același identificator al procesului părinte, introduceți o linie de tip Sum_switches_of_ParentID=N is M, unde N=PPID, iar M este suma calculată voluntary_ctxt_switches+ nonvoluntary_ctxt_switches din status pentru acest proces. Afișați conținutul acestui fișier.
Subiecte de pregătire către lucrarea de laborator 5: Explicaţi noţiunea de proces, PID, instrucţiunile – ps, pstree, top.
Un proces reprezintă un program în execuție și are ataşate o serie de informaţii specifice precum instrucțiunile programului, resurse folosite (precum fişiere deschise), unul sau mai multe fire de execuție şi alte informații necesare procesului de execuţie în paralel. Fiecărui proces în Linux îi este asociat un identificator PID (Process Identifier) format dintr-un număr care ia valori între 0 și 65535.
Afişarea informaţiilor despre procese. O listare a proceselor poate fi efectuată prin comanda ps (ps process status): ps [opţiuni] Principalele opţiuni sunt: -aux - afişează informaţii despre toate procesele din sistem; -l - afişează informaţii despre procese, diferită de –u; -u - afişează informaţii despre procese, dar diferită de –l; -e - afişează informaţii despre toate procesele din sistem utilizând sintaxa standardă. Comanda pstree afişează toate procesele care rulează sub forma unui arbore (tree). Dintre opțiunile cele mai des folosite: n - sortarea proceselor după identificatorul procesului (pid); p – afișarea PID, numere zecimale în paranteze, după fiecare nume de proces; u - afișarea identificatorului utilizatorului (uid). Comanda top este utilizată pentru monitorizarea proceselor în timp real, actualizând informațiile la fiecare 5 secunde. Informaţia afişată poate fi controlată de la tastatură. Tastaţi h şi primiți un „help”. Comanda are multe opțiuni, dintre care: d (delay) - specifică intervalul dintre actualizările ecranului; n - numărul de iterații; p (process identifier) - identificatorul procesului, care va fi urmărit.