Laborator 05 ­ Procese, semnale, pipe­uri

Cheat sheet
Comandă Descriere scurtă

s u p s t o p | k i l l f g & b g

switch user ­ schimbă utilizatorul în sesiunea curentă afișează informații despre porcesele active în sistem afișează informații despre porcese în mod interactiv

p s t r e e ierarhia de procese
pipe trimite un semnal unui proces identificat prin PID

p k i l l caută un proces după nume și îi transmite un semnal
trece un proces în foreground lansează un proces în background running trece un proces din background din stopped în running

m k f i f o crează un pipe cu nume n o h u p rulează o comandă ce va ignora semnalul SIGHUP

Suport laborator
5. Procese [http://books.google.com/books?id=_JFGzyRxQGcC&pg=PA111]

Arhivă laborator
lab05.tar.gz [http://ocw.cs.pub.ro/courses/_media/uso/laboratoare/lab05.tar.gz]

Introducere
Vizualizarea proceselor din sistem
Pentru a afișa informații despre procesele active, putem utiliza p s . Fără nici un argument, listează procesele deschise din terminalul curent. Apar doar două procese: shell­ul b a s h  și procesul p s :
s t u d e n t @ u s o : ~ $p s P I DT T Y T I M EC M D 3 8 2 1p t s / 1 0 0 : 0 0 : 0 0b a s h 3 8 7 7p t s / 1 0 0 : 0 0 : 0 0p s

Dacă adăugăm argumentele e f  comenzii anterioare se vor afișa toate procesele ce rulează în sistem:
s t u d e n t @ u s o : ~ $p se f U I D P I D P P I D CS T I M ET T Y r o o t 1 0 01 9 : 3 7? r o o t 2 0 01 9 : 3 7? r o o t 3 2 01 9 : 3 7? r o o t 6 2 01 9 : 3 7? r o o t 7 2 01 9 : 3 7? r o o t 8 2 01 9 : 3 7? r o o t 1 0 2 01 9 : 3 7? r o o t 1 2 2 01 9 : 3 7? r o o t 1 3 2 01 9 : 3 7? r o o t 1 4 2 01 9 : 3 7? r o o t 1 5 2 01 9 : 3 7? r o o t 1 6 2 01 9 : 3 7? r o o t 1 8 2 01 9 : 3 7? [ . . . ] T I M EC M D 0 0 : 0 0 : 0 0/ s b i n / i n i t 0 0 : 0 0 : 0 0[ k t h r e a d d ] 0 0 : 0 0 : 0 0[ k s o f t i r q d / 0 ] 0 0 : 0 0 : 0 0[ m i g r a t i o n / 0 ] 0 0 : 0 0 : 0 0[ w a t c h d o g / 0 ] 0 0 : 0 0 : 0 0[ m i g r a t i o n / 1 ] 0 0 : 0 0 : 0 0[ k s o f t i r q d / 1 ] 0 0 : 0 0 : 0 0[ w a t c h d o g / 1 ] 0 0 : 0 0 : 0 0[ c p u s e t ] 0 0 : 0 0 : 0 0[ k h e l p e r ] 0 0 : 0 0 : 0 0[ k d e v t m p f s ] 0 0 : 0 0 : 0 0[ n e t n s ] 0 0 : 0 0 : 0 0[ s y n c _ s u p e r s ]

Consultând man, observăm:
e f S e l e c ta l lp r o c e s s e s .I d e n t i c a lt oA . D of u l l f o r m a tl i s t i n g .

Putem folosi m a n

p s  împreună cu opțiunea de căutare pentru a găsi descrierea câmpurilor afișate:

u i d U I D s e ee u i d .( a l i a se u i d ) . e u i d E U I D e f f e c t i v eu s e rI D( a l i a su i d ) . p i d P I D p r o c e s sI Dn u m b e ro ft h ep r o c e s s . p p i d P P I D p a r e n tp r o c e s sI D . c C p r o c e s s o ru t i l i z a t i o n .C u r r e n t l y ,t h i si st h ei n t e g e rv a l u eo ft h ep e r c e n tu s a g eo v e rt h el i f e t i m eo ft h ep r o c e s s . s t a r t _ t i m eS T A R T s t a r t i n gt i m eo rd a t eo ft h ep r o c e s s . t n a m e T T Y c o n t r o l l i n gt t y( t e r m i n a l ) . t i m e T I M E c u m u l a t i v eC P Ut i m e ," [ D D ] H H : M M : S S "f o r m a t . u c m d C M D s e ec o m m . c o m m C O M M A N Dc o m m a n dn a m e( o n l yt h ee x e c u t a b l en a m e ) .

Informații detaliate despre procesele care ruleaza în sistem pot afișate și folosind argumentele a u x . În acest caz argumentele comenzii p s  nu sunt prefixate de caracterul . Este cazul argumentelor date în format BSD.
s t u d e n t @ u s o : ~ $p sa u x U S E R P I D% C P U% M E M V S Z R S ST T Y r o o t 1 0 . 0 0 . 0 2 4 4 5 6 2 4 1 6? r o o t 2 0 . 0 0 . 0 0 0? S T A TS T A R T S s 1 9 : 3 7 S 1 9 : 3 7 T I M EC O M M A N D 0 : 0 0/ s b i n / i n i t 0 : 0 0[ k t h r e a d d ]

 Spre exemplu. 0 0 . 2 1 5 6? S 0 : 0 0k d e i n i t 4 :k l a u n c h e r[ k d e i n i t ]f d = 9 2 1 5 8? S l 0 : 0 4k d e i n i t 4 :k d e d 4[ k d e i n i t ] 2 1 6 3? S 0 : 0 0/ u s r / b i n / b l u e d e v i l h e l p e r 2 1 6 5? S 0 : 0 0/ u s r / b i n / o b e x d a t a s e r v e rn o d a e m o n 2 3 3 7? S 0 : 0 0/ u s r / b i n / b l u e d e v i l m o n o l i t h i c 2 3 3 9? S 0 : 0 0/ u s r / b i n / k g l o b a l a c c e l 2 3 4 1? S l 0 : 0 0/ u s r / b i n / k w a l l e t d 2 3 4 4? S 0 : 0 0/ u s r / b i n / k a c t i v i t y m a n a g e r d Se recomandă folosirea argumentelor cu  (în stil GNU). în toate cele 3 formate. H t h r e a d s S c h i l d r e ni ns u m yc h a n g elf o r m a t M . jj o bc o n t r o l s s i g n a l g r o u pu s e rs i dr o w si n f o O . 0 0 . w w i d eo u t p u t n n u m e r i cW C H A N . U I D Hp r o c e s sh i e r a r c h y Informațiile oferite de utilitarul p s  se pot filtra specificând un set de argumente. rulăm comanda: s t u d e n t @ u s o : ~ $p sus t u d e n t P I DT T Y T I M EC M D 2 0 3 8? 0 0 : 0 0 : 0 0x s e s s i o n m a n a g 2 0 8 6? 0 0 : 0 0 : 0 0s s h a g e n t 2 0 8 9? 0 0 : 0 0 : 0 0d b u s l a u n c h 2 0 9 0? 0 0 : 0 0 : 0 1d b u s d a e m o n 2 1 5 4? 0 0 : 0 0 : 0 0s t a r t _ k d e i n i t 2 1 5 5? 0 0 : 0 0 : 0 0k d e i n i t 4 2 1 5 6? 0 0 : 0 0 : 0 0k l a u n c h e r 2 1 5 8? 0 0 : 0 0 : 0 4k d e d 4 2 1 6 3? 0 0 : 0 0 : 0 0b l u e d e v i l h e l p e 2 1 6 5? 0 0 : 0 0 : 0 0o b e x d a t a s e r v e 2 3 3 7? 0 0 : 0 0 : 0 0b l u e d e v i l m o n o l 2 3 3 9? 0 0 : 0 0 : 0 0k g l o b a l a c c e l Alternativ putem rula și s t u d e n t @ u s o : ~ $p sUs t u d e n t P I DT T Y S T A T T I M EC O M M A N D 2 0 3 8? S s 0 : 0 0/ b i n / s h/ u s r / b i n / x s e s s i o n m a n a g e r 2 0 8 6? S s 0 : 0 0/ u s r / b i n / s s h a g e n t/ u s r / b i n / d b u s l a u n c he x i t w i t h s e s s i o nx s e s s i o n m a n a g e r 2 0 8 9? S 0 : 0 0/ u s r / b i n / d b u s l a u n c he x i t w i t h s e s s i o nx s e s s i o n m a n a g e r 2 0 9 0? S s 0 : 0 1/ / b i n / d b u s d a e m o nf o r kp r i n t p i d5p r i n t a d d r e s s7s e s s i o n 2 1 5 4? S 0 : 0 0/ u s r / l i b / k d e 4 / l i b e x e c / s t a r t _ k d e i n i t+ k c m i n i t _ s t a r t u p 2 1 5 5? S s 0 : 0 0k d e i n i t 4 :k d e i n i t 4R u n n i n g . 0 0 . Z s e c u r i t yd a t a c t r u ec o m m a n dn a m e cs c h e d u l i n gc l a s s w . ou s e r d e f i n e d ff u l l G r o u pU s e rp i dc o l sp p i d j . .i n c l u d i n go t h e ru s e r s tb yt t y g O B S O L E T E-D ON O TU S E ub ye f f e c t i v eu s e rI D( s u p p o r t sn a m e s ) r o n l yr u n n i n gp r o c e s s e s U p r o c e s s e sf o rs p e c i f i e du s e r s x p r o c e s s e sw / oc o n t r o l l i n gt t y s t b yt t y * * * * * * * * * * *o u t p u tf o r m a t* * * * * * * * * * * * * * * * * * * * *l o n go p t i o n s* * * * * * * * * * * o . 0 0 . Op r e l o a d e do v v i r t u a lm e m o r y c u m u l a t i v ef o r m a td e s e l e c t l . pentru a afișa doar procesele deținute de utilizatorul s t u d e n t . m . 0 0 . 0 0 . Pipe­uri anonime Caracterul |  (pipe) este folosit pentru a înlănțui 2 comenzi. 0 0 . 0 0 . 0 0 . 0 0 . . așa cum arată și figura următoare: . V s h o wv e r s i o n L l i s tf o r m a tc o d e s f A S C I Ia r tf o r e s t m . 0 0 . legând ieșirea standard a primei comenzi la intrarea standard a celeilalte. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? S S S S S S S < S < S S < S S S < S < S < 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 1 9 : 3 7 0 : 0 0[ k s o f t i r q d / 0 ] 0 : 0 0[ m i g r a t i o n / 0 ] 0 : 0 0[ w a t c h d o g / 0 ] 0 : 0 0[ m i g r a t i o n / 1 ] 0 : 0 0[ k s o f t i r q d / 1 ] 0 : 0 0[ w a t c h d o g / 1 ] 0 : 0 0[ c p u s e t ] 0 : 0 0[ k h e l p e r ] 0 : 0 0[ k d e v t m p f s ] 0 : 0 0[ n e t n s ] 0 : 0 0[ s y n c _ s u p e r s ] 0 : 0 0[ b d i d e f a u l t ] 0 : 0 0[ k i n t e g r i t y d ] 0 : 0 0[ k b l o c k d ] 0 : 0 0[ a t a _ s f f ] Există 3 formate pentru opțiunile unei comenzi: formatul lung (de exemplu h e l p ) formatul GNU (ca în l s formatul BSD (p s l ) a u x ) Putem vedea semnificația argumentelor mai des folosite pentru p s . 0 0 . 0 0 . T . 0 0 . s t u d e n t @ u s o : ~ $p sh e l p * * * * * * * * *s i m p l es e l e c t i o n* * * * * * * * * * * * * * * * * *s e l e c t i o nb yl i s t* * * * * * * * * Aa l lp r o c e s s e s Cb yc o m m a n dn a m e Nn e g a t es e l e c t i o n Gb yr e a lg r o u pI D( s u p p o r t sn a m e s ) aa l lw /t t ye x c e p ts e s s i o nl e a d e r s Ub yr e a lu s e rI D( s u p p o r t sn a m e s ) da l le x c e p ts e s s i o nl e a d e r s gb ys e s s i o nO Rb ye f f e c t i v eg r o u pn a m e ea l lp r o c e s s e s pb yp r o c e s sI D T a l lp r o c e s s e so nt h i st e r m i n a l sp r o c e s s e si nt h es e s s i o n sg i v e n a a l lw /t t y . 0 0 . 0 0 . 0 0 . 0 0 . 0 0 . ll o n g u u s e r o r i e n t e d s o r tt t yf o r e s tv e r s i o n F e x t r af u l l X r e g i s t e r s h e a d i n gn o h e a d i n gc o n t e x t * * * * * * * * *m i s co p t i o n s* * * * * * * * * V . 0 0 . 0 0 . L . Cu toate acestea. 0 0 . 0 0 . 0 0 . 0 0 . rulând p sh e l p sau o comandă cu un argument nevalid. 0 0 . 0 0 . 0 0 .r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t r o o t 3 6 7 8 1 0 1 2 1 3 1 4 1 5 1 6 1 8 1 9 2 0 2 1 2 2 0 . 0 0 . în unele cazuri forma BSD este mai potrivită.

 aduce în f o r e g r o u n d ultimul proces trimis în b a c k g r o u n d . Astfel putem afla id­ul unui job și îl putem folosi pentru a aduce în foreground job­ul respectiv. adică datele nu se găsesc pe un suport fizic permanent (hard disk). procesele care sunt daemoni au numele terminat în d (sshd). Pachetele ce conțin daemoni de obicei au script­uri de control.Folosind >  și <  putem face ca o comandă să scrie într­un fișier sau să citească dintr­un fișier. Putem comunica cu un daemon prin: fișiere de configurare semnale De obicei. Pentru a vedea ce procese se află în fundal utilizăm j o b s . pentru a deschide fișierul b e a t l e s  utilizând v i m  direct în b a c k g r o u n d  folosim: v i mb e a t l e s& Atunci când utilizăm &  procesul pornește în b a c k g r o u n d  și își începe execuția (este în r u n n i n g ) iar când utilizăm C t r l z  acesta este s t o p p e d . Foreground & Background Diagrama următoare arată stările în care se poate afla un proces și cum se trece dintr­o stare în alta. Folosind |  fișierul nu mai este necesar. localizate în / e t c / i n i t . d / . pentru a aduce un proces din b a c k g r o u n d  în f o r e g r o u n d  utilizăm comanda f g . Fiecare fișier oferă informații despre sistem și este stocat fizic în RAM. câteva dintre acestea: e x e  ­ link către executabilul ce a creat procesul c m d l i n e  ­ comanda utilizată pentru crearea procesului f d  ­ fișierele deschise m a p s  ­ zonele de memorie ale procesului Daemon Un daemon este un tip de proces care rulează în b a c k g r o u n d  și se detașează de terminalul de control. De exemplu. procfs p r o c f s  este un sistem de fișiere virtual. Fără nici un parametru. Informații despre un proces găsim în directorul din / p r o c  care are ca nume PID­ul procesului. Acestea sunt folosite pentru pornire/oprire și acceptă un argument dintre: start stop restart . dar nu este o regulă. f g$ j o b I D Unde $ j o b I d  se va înlocui cu ID­ul job­ului respectiv. Pentru a porni un proces direct în b a c k g r o u n d . folosim & . Pe scurt. După cum se poate observa din diagramă. p r o c f s  este montat în / p r o c . Un astfel de proces nu va accepta comenzi de la tastatură. Pentru a trece din s t o p p e d  în r u n n i n g  utilizăm b g .

 Folosiți m a n Rezolvare s t u d e n t @ u s o : ~ $p se f s t u d e n t @ u s o : ~ $p sa u x p s  (sau secțiunea I n t r o d u c e r e ) pentru a găsi parametrii corespunzători. Pentru a vizualiza informații în timp real. Ierarhia de procese Utilitarul p s t r e e  afișează sub formă arborescentă toate procesele existente în momentul lansării lui. Încercați să găsiți mai multe soluții. 3. Folosiți argumentul C  pentru a specifica numele executabilului i n i t . Rezolvare s t u d e n t @ u s o : ~ $t o pus t u d e n t Dacă tastați h  în timp ce t o p  rulează. Un utilizator poate trimite un semnal unui proces folosind comanda k i l l . De exemplu. De exemplu: C t r l c  ⇒ SIGINT C t r l z ⇒ SIGTSTP C t r l \  ⇒ SIGQUIT Exerciții 1. 2. Folosiți m a n p s  sau h e l p  pentru a afla argumentele corespunzătoare. folosim t o p . ps Analizați procesele care rulează în sistem folosind p s . Porniți o instanță nouă de t o p  și afișați procesele utilizatorului r o o t . Rezolvare s t u d e n t @ u s o : ~ $p s Afișați toate procesele care rulează în sistem. Afișați procesele care au fost deschise din terminalul curent. Pentru a vedea toate semnalele care se pot trimite unui proces utilizăm k i l l l . Timpul de execuție . Afișați doar procesele lansate de utilizatorul s t u d e n t . Utilizând s t u d e n t @ u s o : ~ $p s t r e e identificați primul proces creat la lansarea sistemului de operare (rădăcina arborelui). top Utilitarul p s  poate fi folosit pentru a “face o poză” proceselor sistemului la un anumit moment de timp. Ce reprezintă fiecare câmp din output? Folosiți m a n  pentru a afla. dacă tastați u  puteți selecta interactiv ce utilizatori să fie afișați. 4. se afișează un ecran informativ in care sunt listate comenzile interactive acceptate de t o p .Semnale Unul din mecanismele prin care se poate comunica între procese sunt semnalele. Identificați PID­ul acestui proces folosind p s . s t u d e n t @ u s o : ~ $k i l ll 1 )S I G H U P 2 )S I G I N T 3 )S I G Q U I T 4 )S I G I L L 5 )S I G T R A P 6 )S I G A B R T 7 )S I G B U S 8 )S I G F P E 9 )S I G K I L L 1 0 )S I G U S R 1 1 1 )S I G S E G V 1 2 )S I G U S R 2 1 3 )S I G P I P E 1 4 )S I G A L R M 1 5 )S I G T E R M 1 6 )S I G S T K F L T 1 7 )S I G C H L D 1 8 )S I G C O N T 1 9 )S I G S T O P 2 0 )S I G T S T P 2 1 )S I G T T I N 2 2 )S I G T T O U 2 3 )S I G U R G 2 4 )S I G X C P U 2 5 )S I G X F S Z 2 6 )S I G V T A L R M 2 7 )S I G P R O F 2 8 )S I G W I N C H 2 9 )S I G I O 3 0 )S I G P W R 3 1 )S I G S Y S 3 4 )S I G R T M I N 3 5 )S I G R T M I N + 1 3 6 )S I G R T M I N + 2 3 7 )S I G R T M I N + 3 3 8 )S I G R T M I N + 4 3 9 )S I G R T M I N + 5 4 0 )S I G R T M I N + 6 4 1 )S I G R T M I N + 7 4 2 )S I G R T M I N + 8 4 3 )S I G R T M I N + 9 4 4 )S I G R T M I N + 1 04 5 )S I G R T M I N + 1 14 6 )S I G R T M I N + 1 24 7 )S I G R T M I N + 1 3 4 8 )S I G R T M I N + 1 44 9 )S I G R T M I N + 1 55 0 )S I G R T M A X 1 45 1 )S I G R T M A X 1 35 2 )S I G R T M A X 1 2 5 3 )S I G R T M A X 1 15 4 )S I G R T M A X 1 05 5 )S I G R T M A X 9 5 6 )S I G R T M A X 8 5 7 )S I G R T M A X 7 5 8 )S I G R T M A X 6 5 9 )S I G R T M A X 5 6 0 )S I G R T M A X 4 6 1 )S I G R T M A X 3 6 2 )S I G R T M A X 2 6 3 )S I G R T M A X 1 6 4 )S I G R T M A X Putem transmite anumite semnale utilizând combinații de taste. Parametrii acestei comenzi sunt similari comenzii p s . Folosiți t o p  pentru a lista doar procesele utilizatorului s t u d e n t . Rulați comanda s t u d e n t @ u s o : ~ $t o p Se vor afișa primele procese sortate după gradul de folosire al procesorului.

 uptime Rulați comanda u p t i m e . s t u d e n t @ u s o : ~ $m a nu p t i m e [ . Semnale . Primii 3 descriptori sunt cei standard (0: stdin. 5. ] E E l a p s e dr e a l( w a l lc l o c k )t i m eu s e db yt h ep r o c e s s . 1: stdout. Link­ul e x e  pointează către executabilul ce a creat procesul.a n dt o t a lt i m e : t i m ef" % Er e a l .a n dt h es y s t e ml o a da v e r a g e s Faceți fișierul uptime_ex din arhiva de laborator executabil și rulațil astfel: s t u d e n t @ u s o : ~ / D o w n l o a d s / l a b 0 5 $c h m o d+ xu p t i m e _ e x s t u d e n t @ u s o : ~ / D o w n l o a d s / l a b 0 5 $. . S T o t a ln u m b e ro fC P U s e c o n d su s e db yt h es y s t e mo nb e h a l fo ft h ep r o c e s s( i nk e r n e lm o d e ) .i n[ h o u r s : ] m i n u t e s : s e c o n d s . Reveniți în terminalul în care ați vizualizat structura lui p r o c f s .h o wm a n yu s e r sa r ec u r r e n t l yl o g g e do n . ] u p t i m e g i v e s a o n el i n ed i s p l a yo ft h ef o l l o w i n gi n f o r m a t i o n . Mai multe detalii într­un laborator ulterior. executați într­un terminal separat comanda u p t i m e  de câteva ori la rând. Folderul f d  conține legături simbolice către descriptorii de fișier folosiți de proces. Rulați comanda c d / p r o c / $ P I D  (înlocuiți $ P I D  cu PID­ul găsit anterior). folosiți p s  pentru a identifica PID­ul procesului v i m  pornit.h o wl o n gt h es y s t e mh a sb e e nr u n n i n g . T or u nt h ec o m m a n d` l sF s 'a n ds h o wj u s tt h eu s e r . Care este acesta pentru cazul nostru? Fișierul c m d l i n e  conține linia de comandă folsoită pentru lansarea în execuție a procesului. Hint: folosiți redirectări. Scrieți “we all live in a yellow submarine” în fisier și salvați fișierul. u s e r . Hint: Folosiți argumentul C  al utilitarului p s .i ns e c o n d s . Ce observați? Ștergeți fișierul t e m p _ f i l e Comanda g r e p  citește fișierul primit ca parametru și afișează doar liniile ce se potrivesc cu un anumit șablon.s y s t e m . Rulați s t u d e n t @ u s o : ~ $t i m es l e e p3 Output­ul comenzii t i m e  conține trei valori de timp: r e a l . Pipe­uri anonime În directorul ~  creați un director numit 1 9 6 0 s . Ce observați? 6. 2: stderr).i ns e c o n d s . . Verificați conținutul fișierului folosind c a t . Rezolvare s t u d e n t @ u s o : ~ / 1 9 6 0 s $l sl|g r e pT h e B e a t l e s Rulați comanda s t u d e n t @ u s o : ~ / 1 9 6 0 s $l sl|c a t|c a t|c a t|c a t|c a t|c a t Câte fișiere ar fi fost necesare dacă nu foloseam pipe­uri? 8. Cum variază valorile numerice de load? Ce credeți că face programul? 7. Listați conținutul directorului în care vă aflați. și în el creați fișierele următoare: s t u d e n t @ u s o : ~ / 1 9 6 0 s $t o u c hT i c k e t t o R i d e _ T h e B e a t l e s . Listați conținutul directorului. Închideți sesiunea de vim deschisă anterior. t x tP e n n y L a n e _ T h e B e a t l e s . Folosiți pagina de man pentru a afla ce reprezinta fiecare valoare. / u p t i m e _ e x Execuția acestuia dureză câteva secunde. Folosiți pipe­uri anonime pentru a obține același rezultat. În timp ce executabilul u p t i m e _ e x  rulează. . U T o t a ln u m b e ro fC P U s e c o n d st h a tt h ep r o c e s su s e dd i r e c t l y( i nu s e rm o d e ) . t x t s t u d e n t @ u s o : ~ / 1 9 6 0 s $t o u c hS a t i s f a c t i o n _ R o l l i n g S t o n e sB r o w n S u g a r _ R o l l i n g S t o n e sW i l d H o r s e s _ R o l l i n g S t o n e sP l a y W i t h F i r e _ R o l l i n g S t o n e s s t u d e n t @ u s o : ~ / 1 9 6 0 s $t o u c hH e y J u d e _ T h e B e a t l e s s t u d e n t @ u s o : ~ / 1 9 6 0 s $t o u c hR a i n y D a y W o m e n _ B o b D y l a n Ne interesează drepturile fișierelor ce conțin T h e B e a t l e s  în nume. Nu iesiți din v i m . % Ss y s "l sF s [ . Într­un alt terminal. T h ec u r r e n tt i m e .Pentru a afla cât timp a rulat un anumit proces. Sistemul de fișiere procfs Deschideți cu editorul v i m  un fișier nou numit b e a t l e s . s y s . identificați ce reprezintă cele trei numere de la l o a d a v e r a g e . Deplasați­vă în directorul nou creat (1960) Creați un fișier numit t e m p _ f i l e  ce conține output­ul comenzii l s Rulați următoarea comandă s t u d e n t @ u s o : ~ / 1 9 6 0 s $g r e pT h e B e a t l e st e m p _ f i l e l . t x tY e s t e r d a y _ T h e B e a t l e s . % Uu s e r . se poate folosi comanda t i m e . Folosind pagina de man a utilitarului. . Hint: | .

Tastați C t r l Z . pe rând combinațiile de taste următoare și observați ce semnale se trimit: C T R L Z C T R L C C T R L \ La final. Reveniți la el. Pe ecran vor fi afișate caractere random. Folosiți p i d o f . puteți folosi comanda p g r e p . 10. rulați comanda: s t u d e n t @ u s o : ~ $k i l l9$ ( p i d o fs i g n a l _ t e s t ) Observați că semnalul 9 (SIGKILL) nu poate fi tratat de nici o aplicație. SIGKILL) procesului creat. 11. 9. Aduceți înapoi în foreground prima instanță de v i m  deschisă.Utilizați k i l l l  pentru a vedea toate semnalele care se pot trimite unui proces. Folositi p s  pentru a vedea ca procesul apare în output. $ !  este PID­ul ultimului proces aflat în background. s t u d e n t @ u s o : ~ $b g Trimiteți semnalul S I G K I L L  utilizând k i l l  procesului c a t  din background folosind k i l l  fără a scrie explicit pid­ul procesului. pentru a opri procesul s i g n a l _ t e s t . Utilizați atât k i l l  cât și p k i l l . htop . tastați. puteți folosi signal_test pentru a vedea ce semnal transmite C t r l Z . Observați că procesul a fost trecut în starea S t o p p e d . Faceți programul signal_test din arhiva de laborator executabil și rulați­l: s t u d e n t @ u s o : ~ $c h m o d+ xs i g n a l _ t e s t s t u d e n t @ u s o : ~ $. Din cel de­al doilea terminal. trimiteți 5 semnale diferite (nu trimiteți ­9. Din interfața grafică deschideți g e d i t Deschideți un terminal. Rezolvare s t u d e n t @ u s o : ~ $k i l l9$ ! 12. Aduceți procesul în starea r u n n i n g  fără a îl aduce în foreground. deschideți fișierul T h e B e a t l e s : v i mT h e B e a t l e s Scrieți textul J o h n L e n n o n  în fișier. / s i g n a l _ t e s t Deschideți un alt terminal și aflați PID­ul procesului creat anterior. Utilizând v i m . bg. Alternativ. Variabila $! Rulați comanda s t u d e n t @ u s o : ~ $c a t/ d e v / r a n d o m Nu intrați în panică. xkill Pentru a forța închiderea unei aplicații grafice se poate folosi comanda x k i l l . fg. Procesul este trimis în background. Tastați comanda x k i l l . Ce semnal transmite p k i l l  dacă nu este nici unul precizat explicit? În terminalul în care programul s i g n a l _ t e s t  rulează. Este normal să vedeți caractere ciudate. direct în fundal cu v i m& Folosiți j o b s  pentru a vedea toate procesele care se află în fundal. Operatorul &. rolul fișierului / d e v / r a n d o m  este acela de a genera octeți aleatori. Trimiteți procesul în fundal utilizând semnalul SIGSTOP (C t r l Z ). Porniți un alt proces v i m . Dacă nu vă amintiți. În terminal a apărut mesajul: S e l e c tt h ew i n d o ww h o s ec l i e n ty o uw i s ht ok i l lw i t hb u t t o n1 Ce formă are mouse­ul? Dați click undeva în interiorul ferestrei g e d i t . Hint: fg Trimiteți­l din nou în fundal (C t r l Z ). Folosiți p s  în același terminal pentru a lista procesele pornite în cadrul terminalului Procesul v i m  se află în background.

Ce se întâmplă dacă aveți mai multe sesiuni deschise? $ $  este o variabilă de mediu specială care conține PID­ul procesului curent. folosind e c h o . Afișați detalii despre procesul v i m . Daemon Rulați programul s i g n a l _ t e s t  din arhivă astfel: . Observați că l e s s  permite operații mai avansate decât m o r e . Determinați PID­ul procesului părinte. rulați comanda s t u d e n t @ u s o : ~ $h t o p Observați că informațiile afișate sunt cele din top dar interfața este mult mai ușor de folosit. (folosiți variabila de mediu $ P P I D ) Aflați numele procesului părinte. Acestea au o reprezentare fizică pe disc. Folosiți l e s s  sau m o r e  pentru a prelucra outputul p s . folosiți comanda p g r e p  pentru a afișa numele și pid­ul tuturor proceselor v i  din sistem. determinați PID­ul procesului g n o m e p a n e l . Căutați parametrul l  în m a n p g r e p  și folosiți­l pentru a completa lista de PID­uri obținută anterior cu date despre numele proceselor. 17. Deschideți un alt terminal și afișați conținutul fișierului t w i t t e r  folosind c a t . Find out PIDs Folosiți p s  și g r e p  pentru a afla PID­ul terminalului curent. pgrep Deschideți editorul v i . Se spune frecvent că ”l e s s  is m o r e ” Rezolvare s t u d e n t @ u s o : ~ $p se|l e s s 14. Cum ați putea afișa doar procesele v i . Într­un alt terminal. Ce observați? Încercați să afișați din nou conținutul fișierului. fără a afișa și procesele ale căror nume conțin grupul de litere v i ? Căutați în man după “exactly”. more Folosind p s  și listarea tuturor proceselor. less. Pipe­uri cu nume Un tip special de fișiere unix sunt pipe­urile cu nume. detalii referitoare la fișierele deschise și la zonele de memorie folosite (folosiți tasta l ) Rezolvare Selectăm procesul și tastăm l 13.Instalați pachetul h t o p  folosind a p t g e t  (aduceți­vă aminte din laboratorul 2 cum instalați pachete). NU folosiți scroll sau parametrul C . Apăsați q  pentru a părăsi l e s s . Creați un pipe cu numele t w i t t e r : s t u d e n t @ u s o : ~ $m k f i f ot w i t t e r Listați în format lung informații despre acest fișier. Ce observați? Scrieți mesajul “USO rU1z” în fișierul t w i t t e r . Ce se întâmplă dacă revenim în primul terminal și încercăm să scriem un nou mesaj în fișier? Rezolvare Terminal 1 ls ­l twitter echo “USO rU1z” > twitter cat twitter cat twitter echo “It works!” > twitter Terminal 2 15. Deschideți o instanță de v i m . (p s  și g r e p ) Rezolvare s t u d e n t @ u s o : ~ $p se|g r e pb a s h s t u d e n t @ u s o : ~ $e c h o$ $ s t u d e n t @ u s o : ~ $e c h o$ P P I D s t u d e n t @ u s o : ~ $p se|g r e p$ P I D# r e p l a c e$ P I Dc uc e lo b ț i n u ta n t e r i o r 16. Într­un alt terminal. Determinați PID­ul terminalului curent.

8 . Acesta este un exemplu de daemon al unui server web. / s i g n a l _ t e s t4 2 Programul creează un daemon. Ce utilizator deține procesul apache? a p a c h e 2  se instalează împreună cu un script care permite interacțiunea facila cu acesta. trimițând procesul în background prin &  (n o h u p Rezolvare s t u d e n t @ u s o : ~ $n o h u pp i n gc1 0 0 0 0g o o g l e . 8 . Rezolvare s t u d e n t @ u s o : ~ $p i n gc1 0 0 0 0g o o g l e . daemonul se va închide. Acest script trimite un semnal daemonului Apache. Ce se întâmplă cu procesul? Rezolvare s t u d e n t @ u s o : ~ $p i n g8 . Rezolvare s t u d e n t @ u s o : ~ $p g r e ps i g n a l _ t e s t Singura modalitate de a interacționa cu acesta. o dată ce a fost pornit. c o m  într­un terminal. Aflati pid­ul procesului p i n g  și folosiți d i s o w n  împreună cu pid­ul descoperit anterior. 8 . Rezolvare s t u d e n t @ u s o : ~ $p i n g8 . Procesul rulează în background. 8 . d / a p a c h e 2  împreună cu argumentul s t o p  opriți procesul apache. c o m # A l t F 4( E n t e r ) s t u d e n t @ u s o : ~ $p se|g r e pp i n g s t u d e n t @ u s o : ~ $h t o p#c ă u t a mp i n gî no u t p u t Încercați același lucru și trimițând procesul p i n g  în background prin folosirea & .s t u d e n t @ u s o : ~ $. Închideți acest terminal și verificați (folosind p s  și h t o p ) dacă procesul p i n g  mai există. apoi închideți terminal­ul. în format lung. Verificați că există un proces a p a c h e 2  care rulează. 8 . Navigați către directorul din / p r o c  corespunzător procesului. Nohup Porniți un proces folosind comanda p i n g c1 0 0 0 0g o o g l e . Ce observați? Rezolvare s t u d e n t @ u s o : ~ $c d/ p r o c / $ ( p g r e ps i g n a l _ t e s t ) s t u d e n t @ u s o : / p r o c / < p i d > $l slf d Instalați pachetul a p a c h e 2 . Rezolvare s t u d e n t @ u s o : ~ $p i n gc1 0 0 0 0g o o g l e . 8 . 8>/ d e v / n u l l& . Folosind / e t c / i n i t . 8 . 8>/ d e v / n u l l& . disown Rulați comanda p i n g 8 . Folosiți un procedeu pentru a afla PID­ul procesului creat. Listați filedescriptorii deschiși de proces. c o m& ) Folosirea n o h u p  împreună cu &  permite pornirea de procese ce nu vor fi terminate în momentul încheierii sesiunii curente. Procesul este rulat în background. . Închideți acest terminal și verificați (folosind p s  și h t o p ) dacă procesul mai există. Ca rezultat. 19. 8>/ d e v / n u l l& #c l o s et e r m i n a l s t u d e n t @ u s o : ~ $p se|g r e pp i n g Deschideți un alt terminal și rulați din nou p i n g 8 . d / a p a c h e 2s t o p 18. 8>/ d e v / n u l l& d i s o w n$ ( p i d o fp i n g ) #c l o s et e r m i n a l s t u d e n t @ u s o : ~ $p se|g r e pp i n g d i s o w n  este o comandă built­in a shell­ului care face ca un proces să nu se termine în momentul încheierii sesiunii curente. 8 . Din contul cărui utilizator trebuie trimis semnalul? Rezolvare s t u d e n t @ u s o : ~ $s u d oa p t g e ti n s t a l la p a c h e 2 s t u d e n t @ u s o : ~ $p se|g r e pa p a c h e 2 s t u d e n t @ u s o : ~ $s u d o/ e t c / i n i t . o reprezintă semnalele. c o m& #A l t F 4( E n t e r ) s t u d e n t @ u s o : ~ $p se|g r e pp i n g s t u d e n t @ u s o : ~ $h t o p#c ă u t a mp i n gî no u t p u tș iî lg ă s i m p i n gc1 0 0 0 0g o o g l e . c o m& #A l t F 4( E n t e r ) s t u d e n t @ u s o : ~ $p se|g r e pp i n g s t u d e n t @ u s o : ~ $h t o p#c ă u t a mp i n gî no u t p u tș in u lg ă s i m Încercați și folosind n o h u p .

Puteți folosi p s t r e e  pentru vizualizare rapidă sau p s  afișând și P P I D . Pentru a verifica. Screen Instalați pachetul s c r e e n .20. Rezolvare Control­A Control­C creează o fereastră nouă Control­A număr navighează la fereastra număr Control­A Control­D detașează screen Resume la o sesiune se face cu s c r e e n r uso/laboratoare/laborator­05. p i d . o instanță de v i m  și procesul corespunzător comenzii p i n g g o o g l e . Hint: porniți un x t e r m  din interiorul altui x t e r m  pornit din terminal și terminați primul x t e r m  pornit. în paralel. Rezolvare 0 $x t e r m 1 $x t e r m Se închide primul x t e r m  pornit. că dacă terminăm părintele unui proces. 2 $p se oc m d . atunci copii lui sunt preluați de procesul i n i t .eftimie . c o m . pagina de manual a programului s c r e e n . pornind procese și trimițând semnalele corespunzătoare. conectați­vă la sesiunea anterioară de s c r e e n . Folosiți­l pentru a rula. determinați combinația de taste necesară pentru a părăsi s c r e e n  fără a opri procesele care rulează. Utilizând pagina de manual. Procese orfan Demonstrați.txt ∙ Last modified: 2012/11/19 11:48 by ioan. p p i d|g r e px t e r m 21.

Sign up to vote on this title
UsefulNot useful