Documente Academic
Documente Profesional
Documente Cultură
2016
Lucrarea de laborator 4. Managementul proceselor n sistemul de operare GNU / Linux
Subiecte:
1. Directive de combinare a comenzilor
2. Comenzi pentru gestionarea proceselor
3. Planificarea timpului de pornire a proceselor
4. Transmiterea datelor i gestionarea ntre procese
Obiective :
Sarcinile de baz ale managementului proceselor n sistemul de operare GNU / Linux
sunt gestionarea prioritailor proceselor, planificarea pornirii proceselor conform orarului i
organizarea schimbului de date ntre procese, de exemplu prin intermediul semnalelor. Pentru
automatizarea gestionrii, administratorii de sistem creaz script-uri de control. Consecutivitatea
comenzilor n scripturile de control poate fi realizata cu ajutorul operatorilor tradi ionali de
programare procedural (operatorul condiional, operatorul de bucl), dar sunt adesea folosite
directive speciale de asociere (combinare).
Directivele de combinare a comenzilor:
Interpretorul de comand bash suport urmatoarele directive de combinare a comenzilor:
comanda 1 | comanda 2 - redirecionarea inputului standart
comanda 1 ; comanda 2- ndeplinirea consecutiv a comenzilor
comanda 1 &&
precedente
comanda 1 || comanda 2- ndeplinirea comenzii la ncheierea esuat a comenzii precedente
- alipirea comenzilor dup directive ||, && sau n corpul buclelor sau al funciilor
comanda 1 & -de rularea comenzii n regim fundal ( intrarea i ieirea standart nu sunt legate
de consola din care se deruleaz procesul ; controlarea procesului n ambele cazuri e posibil
doar cu ajutorul semnalelor).
pkill - permite expedierea unui semnal unui grup de procese cu caracteristicile indicate
nice - lanseazprocesul cu indicarea semnificaiei prioritii. Diminuarea semnifica iei
( mrimea prioritaii de execuie) poate fi iniat doar de utilizatorul root;
renice schimbvaloarea prioritaii pentru procesul lansat n execuie. Micorarea
semnificaiei (mrirea prioritaii de execuie ) poate fi iniiat doar de utilizatorul root
tail nu doar afieaz ultimile n rnduri din fiier dar i permite organizarea controlului
fiierelor - detectarea i afiarea noilor rnduri ce apar la sfiritul fiierului.
at - ndeplinete o singur lansare ntrziat a comenzii
Exemple:
at now +8 hours f ~/myscript.sh
n acest exemplu comanda at este folosit pentru a citi din fiierul myscript.sh peste 8 ore de la
timpul curent.
at m 01:35 < my-at-jobs.txt
Se vor executa comenzile listate n fiierul my-at-jobs.txt la ora 01:35. Toate ieirile de la locul
de munc vor fi trimise prin post ctre utilizatorul care ruleaz sarcina.
cron daemon, care se ocup de planificarea i executarea comenzilor lansate conform
unui timp anumit. Comenzile executate periodic se indic in fiiere /etc/crontab( nu prin
intermediul comenzii cron , dar prin introducerea cuvntului crontabn fiier sau utilizarea
comenzii cu acelai nume- crontab) Comenzile care trebuie lansate doar o dat se adaug cu
ajutorul comenzii at. Sintaxa irului crontab este descris n felul urmator :
Fiecare comand n fiierul crontab ocup un rnd i const din 6 cmpuri:
minuta ora zi_luna luna ziua_saptmnii comanda
Semnificaiile permise:
minuta
de la 0 la 59
ora
de la 0 la 23
ziua_lunii
de la 1 la 31
luna
ziua_saptmnii
handler.sh
#!/bin/bash
#!/bin/bash
(tail -n 0 -f data.txt) |
while true
while true
do
do
read LINE
case $LINE in
done
read LINE
"QUIT")
echo "exit"
killall tail
exit
;;
*)
echo $LINE
;;
esac
done;
Scriptul Generator citete rndurile din consol ntr-un ciclu infinit i le adauga la
sfiritul fiierului data.txt .
Scriptul Handler va fi analizat mai detaliat. Comanda tail permite citirea ultimilor n
rnduri din fiier. Insa, una din cele mai rspndite variante de utilizare a acestei comenzi o
constituie organizarea urmririi fiierului. La utilizarea construciei tail f citirea din fiier va
avea loc doar n cazul adugrii informaiei n acest fiier. n acelai timp, cheia n 0 previne
citirea din fiier pn cnd coninutul sau nu s-a rennoit dup lansarea comenzii tail. ntruct
este necesar transferul fluxul de iesire a comenzii tail in fluxul de intrare a scriptului Handler,
se folosete construcia (comanda) |. Parantezele rotunde permit lansarea procesului child n
interiorul procesului printe Handler, iar operatorul de pipeline permite redirec ionarea
fluxului de iesire a procesului child in fluxul de intrare a procesului printe. n a a fel comanda
read n acest script citete output-ul comenzii tail.
Cealalt parte a scriptului se bazeaz pe construciile nsuite la lucrrile de laborator
anterioare i nu necesit o nsuire repetat, excepie facind doar comanda killall tail. Cu ajutorul
ei este ncheiat procesul child tail naintea finalizrii procesului printe. Comanda killall, n
acest caz, se utilizeaz pentru simplificarea codului, dar nu mereu este corect. O soluie mai bun
este de a determina PID-ul procesului concret tail, apelat n script i de a-l incheia cu ajutorul
comenzii kill.
Interaciunea proceselor cu ajutorul semnalelor
Semnalele reprezint forma fundamental de transmitere a controlului de la un proces la
altul. Exist semnale standarte (de sistem), ce au o denumire fix (de ex. SIGTERM,
SIGKILL, etc), dar exist i posibilitatea de a transmite procesului un semnal creat de ctre
utilizator.
Nr
1
Nume
HUP
Descriere
Hangup. Sfrit. Recepionarea acestui
blocat
Da
de taste
Da
Da
<Ctrl>+<C>
INT
ncheiat.
Interrupt. n cazul executrii unor comenzi
simple apeleaz sfritul executarii, iar n
sau <Del>
QUIT
active.
De regul, mai puternic dect semnalul
Da
Da
ILL
Interrupt
Illegal instructon. Procesorul central s-a
Da
Da
Da
Da
FPE
eroarea.
Floating Point Exception. Eroare de calcul, de
KILL
Nu
Nu
11
SEGV
Da
Da
PIPE
neautorizate a memoriei.
A fost ntreprins incercarea de a transmite
Da
Da
TERM
Da
Da
CHILD
procesul.
Schimbarea strii procesului child.
Da
Da
13
<Ctrl>+<\>
18
CONT
Da
Da
19
STOP
Nu
Nu
20
TSTR
Da
Da
<Ctrl>+<Z>
n cazul semnalelor de sistem, de regul, exist programul de tratare al acestui semnal codul, care se ndeplinete n cazul n care s-a recepionat semnalul. Pentru folosirea semnalelor
utilizator este necesar de a scrie propriul program de tratare.
Pentru prelucrarea semnalului n sh(bash) se utilizeaz comanda ncorporat trap ce are
formatul:
trap action signal
Comenzii i se transmit 2 parametri : aciunea la primirea semnalului i insi semnalul,
pentru care se va ndeplini aciunea indicat. De obicei n calitate de aciune se indic apelul
funciilor, descrise mai sus n codul script-ului.
Cu ajutorul comenzii trap este posibil de indicat nu numai programul de tratare a
semnalului utilizator ci i de indicat alt program handler pentru unele semnale de sistem ( cu
excepia celor a cror preluare este interzis). n acest caz prelucrarea semnalelor va trece la
programul handler indicat n trap.
Pentru demonstrarea transmiterii gestiunii de la un process la altul , vom mai analiza
cteva scripturi:
generator.sh
handler.sh
#!/bin/bash
#!/bin/bash
while true
do
MODE="WORK"
read LINE
case $LINE in
usr1(){
"STOP")
kill -USR1 $(cat .pid)
MODE="STOP"
}
;;
*)
;;
while true
esac
do
done
case $MODE in
"WORK")
echo "still working"
;;
"STOP")
echo "stopped"
exit
;;
esac
sleep 1
done
n acest caz scriptul Generator va numra rndurile din consol ntr-un ciclu infinit ,
dar nu va ntreprinde nimic (se utilizeaz operatorul : ) pentru orice linie de afiare, n afar de
linia STOP, care dac va fi primit se va expedia semnalul de utilizator USR1 n procesul de
prelucrare. nct procesul Generator trebuie s cunoasc PID-ul procesului de prelucrare ,
transmiterea acestui numr de identificare se va realiza printr-un fiier ascuns. n procesul de
prelucrare determinarea PID-ului se realizeaz prin variabila de sistem $$.
Procesul de prelucrare afieaz la ecran un mesaj despre faptul ca procesul inca e viu si
ruleaza, pna n momentul primirii semnalului USR1. n acest moment se lanseaz procesul de
prelucrarea usr1(), care schimb valoarea variabilei MODE. Prin urmare la pasul urmtor al
ciclului va fi afiat un mesaj despre ncetarea activitaii n legtur cu apariia semnalului i
activitatea scriptului va fi ncetat.
Sarcini la lucrarea de laborator
1) Creai i executai un script, care va ncerca s creeze directoriul logs n directoriul
curent. Dac directoriul a fost creat cu succes, script-ul va nscrie n fiierul report, aflat tot
n directoriul curent, un mesaj de genul catalog logs was created successfully i va crea n
directoriul logs un fiier cu formatul numelui Data_Timpul_pornirii_scriptului.
Ulterior, dac toate operaiile s-au executat cu succes, planificai o sarcin ( job,
task)care va fi efectuat n fiecare secund i presupune nscrierea unui mesaj ( Hello,
World!) n fiierul created anterior n directoriul logs.
3) Procesul generator citete de la terminal liniile ntr-un ciclu infinit. Dac linia
citit conine numai simbolul + el transmite procesului handler semnalul USR1. Dac
linia citit conine numai simbolul x, procesul generator transmite procesului handler
semnalul USR2. Dac linia citit conine cuvntul TERM, procesul generator transmite
procesului handler semnalul SIGTERM. Alte valori sunt ignorate.
ntrebri de control:
1.
2.
3.
4.
5.
6.
7.
8.
9.