Sunteți pe pagina 1din 11

Gestionarea Proceselor n SO GNU/Linux

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 &&

comanda 2- ndeplinirea comenzii la ncheierea cu success a comenzii

precedente
comanda 1 || comanda 2- ndeplinirea comenzii la ncheierea esuat a comenzii precedente

comanda 1 $ ( comanda 2) transmiterea rezultatelor comenzii 2 n calitate de argumeni ai


apelrii comenzii 1
comanda 1 > file - direcionarea modului standart de introducere n fiier( coninutul fiierului
existent se terge)
comanda 1 >> file - direcionarea modului standart de introducere n fiier ( informa ia se
adaug la finalul fiierului )
{
comanda 1
comanda 2
}

- 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).

Comenzi pentru gestionarea proceselor:


kill transmite un semnal procesului. Semnalul se poate transmite sub forma de numr
sau valoarea lui simbolic. Implicit ( fr a indica semnalul ) se transmite semnalul pentru
ncheierea procesului. Identificarea procesului pentru comanda kill are loc prin PID. O list a
semnalelor de sistem n GNU/ Linux cu indicarea numerelor si semnificaiilor simbolice poate fi
obtinut prin intermediul comenzii kill-1;
killall funcioneaz analog comenzii kill, dar pentru identificarea procesului se
utilizeaz numele ei simbolic, dar nu PID-ul;
pidof - determin PID-ul procesului dup numele su;
pgrep determin PID-ul procesului cu caracteristicile indicate ( de ex. rulate de un
anumit utilizator ) ;

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

de la 1 la 12 ( sau 3 litere de la Jan pn la Dec )

ziua_saptmnii

de la 0 la 6 ( 0 e duminica sau 3 litere de la Sun pn la Sat)

Dac n cmpul respectiv introducem simbolul * aceasta va corespunde oricrei


semnificaii posibile. Pentru cmpuri se poate de indicat diapazonul semnificaiilor, separate prin
cratim. De exemplu:
0 11 6-9 1-3 * echo Hello World! - afiarea la terminal Hello World! la 11:00 n zilele lunii
ianuarie, februarie i martie- 6,7,8,9.
0 */2 * * mon echo Hello World! afiarea la terminal Hello World! la fiecare or fix n
fiecare zi de luni.
Exemple:
crontab e

Creaza un fiier crontab.


crontab l

Vizualizarea listei crontab activi.


Un fiier crontab are ase cmpuri pentru specificarea minute, ora, zi a lunii, luna, zi a
sptmnii i comanda pentru a fi rulat la acel interval. Vezi mai jos:
*
*
*
*
* command to be executed
|
|
|
|
|
|
|
|
|
+----- day of week (0 - 6) (Sunday=0)
|
|
|
+------- month (1 - 12)
|
|
+--------- day of month (1 - 31)
|
+----------- hour (0 - 23)
+------------- min (0 - 59)
* * * * * #Runs every minute
30 * * * * #Runs at 30 minutes past the hour
45 6 * * * #Runs at 6:45 am every day
45 18 * * * #Runs at 6:45 pm every day
00 1 * * 0 #Runs at 1:00 am every Sunday
00 1 * * 7 #Runs at 1:00 am every Sunday

00 1 * * Sun #Runs at 1:00 am every Sunday


30 8 1 * * #Runs at 8:30 am on the first day of every month
00 0-23/2 02 07 * #Runs every other hour on the 2nd of July

sleep seteaz o pauz n ndeplinirea scriptului


Organizarea interaciunii reciproce dintre dou procese
Exist cteva variante de organizare a interaciunii dintre procese. nct esena
interaciunii const n transmiterea datelor i/sau controlului de la un process la altul, vor fi
analizate 2 cazuri rspndite de organizare a unui aa fel de interaciune: transmiterea datelor prin
fiier i transmiterea controlului prin intermediul semnalului.
Interaciunea proceselor prin intermediul fiierului
Pentru demonstrarea transmiterii informaiei prin fiier vom analiza 2 scripturi
Generator i Handler. Se cere citirea informaiei de la consol cu ajutorul procesului
Generator i afiarea acesteia la terminal prin intermediul procesului Handler, n aa fel
nct citirea de catre procesul generator a irului QUIT va conduce la ncheierea procesului
handler. Fiecare script se lanseaz n terminalul sau propriu. Schimbnd terminalele e posibil de
controlat scripturile i de urmarit activitatea lor.
generator.sh

handler.sh

#!/bin/bash

#!/bin/bash

echo "" > data.txt

(tail -n 0 -f data.txt) |

while true

while true

do

do
read LINE

echo $LINE >> data.txt

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

Poate fi Poate fi Combinaia


preluat
Da

blocat
Da

de taste

Da

Da

<Ctrl>+<C>

semnal, de regul, semnific c s-a ncheiat


activitatea n terminalul din care a fost lansat
procesul i, respectiv, procesul, la fel, trebuie
2

INT

ncheiat.
Interrupt. n cazul executrii unor comenzi
simple apeleaz sfritul executarii, iar n

sau <Del>

programele interactive - sfrirea procesului


3

QUIT

active.
De regul, mai puternic dect semnalul

Da

Da

ILL

Interrupt
Illegal instructon. Procesorul central s-a

Da

Da

Da

Da

confruntat cu o comand necunoscut (n


majoritatea cazurilor aceasta nseamn c s-a
comis o eroare de program). Semnalul se
transmite programului n care s-a depistat
8

FPE

eroarea.
Floating Point Exception. Eroare de calcul, de

KILL

exemplu, mparirea la zero.


Inceteaz ntoteauna executarea procesului.

Nu

Nu

11

SEGV

Segmentation Violation. Accesarea unei pri

Da

Da

PIPE

neautorizate a memoriei.
A fost ntreprins incercarea de a transmite

Da

Da

TERM

recepioneze aceste date.


Software Termination. Cererea de a ncheia

Da

Da

CHILD

procesul.
Schimbarea strii procesului child.

Da

Da

13

datele prin intermediul unui pipeline sau


cozii FIFO, dei nu exist un proces capabil sa
15
17

<Ctrl>+<\>

18

CONT

Cotinuarea executrii procesului ncetat.

Da

Da

19

STOP

Sfrirea executrii procesului.

Nu

Nu

20

TSTR

Semnal de oprire, generat de tastatur.

Da

Da

<Ctrl>+<Z>

Transfera procesul n regim de fundal

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

echo $$ > .pid

do

MODE="WORK"
read LINE

case $LINE in

usr1(){

"STOP")
kill -USR1 $(cat .pid)

MODE="STOP"
}

;;
*)

trap "usr1" USR1


:

;;

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.

2) Procesul generator transmite informaia citit de la tastatur procesului handler


prin intermediul unui fiier. Procesul handler trebuie s prelucreze liniile noi din fiier n
modul urmtor:
- dac linia conine numai simbolul +, atunci procesul handler comut regimul in
adunare si asteapta introducere datelor numerice;
- daca linia contine numai simbolul x, atunci procesul handler comuta regimul n
nmulire i ateaptintroducere datelor numerice;
- dac linia conine un numr natural, atunci procesul handler efectueaz operaia
activ(regimul ales) asupra valorii variabilei resultat i numrului citit i afieaz rezultatul.
La pornirea scriptului, valoarea variabilei resultat este setat la 1, iar regimul n
adunare. La primirea liniei QUIT procesul handler afieaz un mesaj de stopare normal
a calculelor i termin activitatea. n cazul primirii altor valori, procesul handler afieaz un
mesaj de eroare i termin activitatea.

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.

Procesul handler adun sau nmulete cu 2 valoarea curent a variabilei


rezultat(valoarea iniial este 1) n dependen de semnalul definit de utilizator trimis i
afieaz rezultatul la ecran. Calculul i afiarea are loc o singur dat ntr-o secund. Primind
semnalul SIGTERM, procesul handler isiincheie activitate, afisind un mesaj despre incetarea
activitii din cauza unui semnal trimis de alt process.

ntrebri de control:
1.
2.
3.
4.
5.
6.
7.
8.
9.

Cu ce comenzi poate fi pornit un proces?


Cum poate fi oprit un proces?
Procesele au prioritate ? Argumentai.
Poate fi modificat prioritatea unui proces n timpul rulrii lui?
Este posibil programarea n timp a proceselor ?
Cu ce comenzi este asigurata gestionarea proceselor?
Este posibil de a garanta ordinea execuiei proceselor? Argumentai.
Este posibil de a porni 2 procese simultan care interancioneaz ntre ele?
Este posibil oprirea unui proces din altul? Argumentai.

S-ar putea să vă placă și