Lezione 11 Processi Sistemi Operativi (9 CFU), Cdl Informatica, A
Total Page:16
File Type:pdf, Size:1020Kb
Lezione 11 Processi Sistemi Operativi (9 CFU), CdL Informatica, A. A. ! !" ! 1 Dipartimento di Scienze Fisic$e, Informatic$e e %atematic$e Universit& di %odena e Re((io )mi*ia $ttp+"",e-*a-.in(..nimo.it"peop*e"andreo*ini"didattica"sistemi/operativi 1 0.ote of t$e da1 (%editate, (ente, meditate...) “This is the UNIX philosophy: write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a niversal inter"ace.# #o.(*as McI*ro1 (192 -) %atematico, In(e(nere, Programmatore Inventore de**e pipe e de**e utilit1 U3I4 2 SOLUZIONI DEGLI ESERCIZI 3 Esercizio 1 (1 min.) 0.al 5 il PID del processo init (il (estore dei servizi U3I4)6 4 Identi7cazione esatta con pidof Il PID del processo init p.8 essere individ.ato a partire dal s.o nome esatto con i* comando pidof+ pidof init Si dovre--e ottenere il PID 1. 5 Esercizio 2 (2 min.) I processi del des9top :;3OM)< iniziano con la strin(a :(nome<. Come si possono individ.are i processi del des9top in esec.zione6 6 Individuazione tramite pgrep I processi de**=am-iente des9top ;3OME possono essere individ.ati cercando *=espressione re(olare ^gnome.*$ con il comando pgrep+ pgrep ^gnome.*$ Per stampare anc$e i nomi dei comandi si .sa *=opzione -l+ pgrep -l ^gnome.*$ 7 Esercizio 3 (2 min.) Elencate t.tti i processi (e relativi PID) ese(.iti per conto del vostro .sername. Le((ete la pa(ina di man.ale del comando opportuno per capire come fare. 8 Lett.ra pagina manuale pgrep Si apra la pagina di man.ale del comando pgrep+ man pgrep Scorrendo la pagina, si dovre--ero trovare le due opzioni -u e -U, c$e svolgono il compito ric$iesto. Si .si *=opzione -u. Il perc$> sar& c$iaro in .na *ezione s.ccessiva. 9 Individuazione tramite pgrep I processi de**=.tente studente possono essere individ.ati desktop con *=opzione -u del comando pgrep+ pgrep -l -u studente 10 Esercizio 4 (2 min.) Aprite .n terminale. Con (li str.menti Processo a vostra disposizione, individ.ate .n padre modo per creare .na (erarc$ia di processi come @.ella mostrata in Processo 7(.ra. 7(*io Processo nipote 11 Esec.zione di s$e** gnome-terminal È suBciente lanciare .n Avvio de* em.latore di terminale ed terminale ese(.ire per tre volte il processo bash bash+ bash La (erarc$ia bash richiesta bash bash Avvio de**e Si ottiene l'a*-ero dei processi bash s$e** riportato a 7anco. bash 12 Esercizio 5 (2 min.) %ostrate la catena di processi da init ad .no @[email protected] dei processi bash. 13 Individuazione processo con pgrep Si invidivua .na istanza di EASH con il comando pgrep+ pgrep bash 1234 2345 3456 Si sce(lie .no dei PID, ad esempio 1234. 14 Gis.alizzazione tramite pstree Per vis.alizzare i processi ric$iesti si p.8 .sare il comando pstree. Si .sano le opzioni se(.enti+ -a → stampa dei comandi -p → stampa dei PI# -H → evidenziazione di un processo specifico (e antenati) Il comando ric$iesto 5 il se(.ente+ pstree -a –p -H 1234 Per visua*izzare solo *a catena di processi, si può sostit.ire *=opzione -H con l=opzione -s+ pstree -a –p -s 1234 15 Esercizio 6 (1 min.) Avviate il comando top. Ierminate il processo appena creato, inviandogli .n se(nale opportuno. 16 Esec.zione de* comando top Si apra .n n.ovo terminale e si ese(.a il comando se(.ente+ top 17 Individuazione de* PID con pgrep Si individ.a il PID del processo top con il comando pgrep+ pgrep top 1234 18 Ierminazione con kill Si invia il se(nale di terminazione anomala SIGI)'% al PI#+ kill 1234 3on 5 necessario esplicitare i* se(nale in @.anto SIGT)'M 5 il se(nale di default inviato al processo. Se proprio lo si v.ole esplicitare+ kill -15 1234 19 Esercizio 7 (3 min.) Ese(.ite .n em.latore di terminale. Le((ete la pa(ina di man.ale di pkill e individ.ate .n modo per terminare *=istanza piK recente del processo bash. 20 Lett.ra pagina manuale pgrep Si apra la pagina di man.ale del comando pkill+ man pkill Scorrendo la pagina, si dovre--e trovare *=opzione -n, c$e svo*(e il compito ric$iesto. 21 Uccisione de* processo con pkill Si termina il processo con il comando pkill, .sando *=opzione -n+ pkill -n bash $TTENZION%( P.ò succedere c$e @.esto comando non funzioni. Ciò capita @.ando si prova ad .ccidere i* termina*e da c.i si sta digitando il comando. BASF ignora per motivi di sic.rezza tutti i se(na*i ricevuti dai processi 7(*i. Per (arantire *a c$iusura, si .si SI;KILL (non (estibile) a* posto di SI;I)'%+ pkill -KILL -n bash 22 Esercizio 8 (2 min.) Gisualizzate i trenta 7le piK (randi ne**=intero 7*e s1stem. 23 Stampa di fi*e e dimensioni con find Si stampano i 7le e le relative dimensioni con il comando find+ find / -printf “%s %p\n” 24 Ordinamento con sort L=outp.t del comando precedente viene dato in pasto al comando di ordinamento sort -nrk1, c$e ordina le ri($e ricevute da ST#I3 in modo n.merico e decrescente s.l primo campo+ find / -printf “%s %p\n” | sort -nrk1 25 Se*ezione prime ri(he con head L=outp.t del comando precedente viene dato in pasto al comando di head -n 30, c$e seleziona le prime trenta ri($e (ovvero i primi trenta 7le)+ find / -printf “%s %p\n” | sort -nrk1 | head -n 30 26 Esercizio 9 (3 min.) Il comando se(.ente estrae le colonne :.sername< e :.ser ID< di /etc/passwd e stampa il valore delle .ltime dieci ri($e+ cut -f1,4 /etc/passwd | head -10 Geri7cate la correttezza del comando. 27 #e-.( de* comando con tee Si log(a o(ni outp.t intermedio a((i.n(endo .na istanza di tee dopo o(ni pipe+ cut -f1,4 /etc/passwd | tee cut.txt | head -10 | tee head.txt 28 Analisi o.tp.t cut L=outp.t di cut mostra tutti i campi di /etc/passwd, non solo il primo e il @.arto. Il separatore non 5 stato impostato; lo si imposta con *=opzione -d: di cut+ cut -d: -f1,4 /etc/passwd 29 #e-.( de* comando con tee Si log(a o(ni outp.t intermedio a((i.n(endo .na istanza di tee dopo o(ni pipe+ cut -f1,4 /etc/passwd | tee cut.txt | head -10 | tee head.txt 30 Analisi de**=outp.t di cut L=outp.t di cut mostra .no .ser ID pari a 65534. Ci8 5 molto sospetto, poic$> (li .ser I# dei primi .tenti sono solitamente vicini allo zero. Il @.arto campo del record di /etc/passwd 5 i* (ro.p ID, non lo .ser ID. Si imposta il terzo campo, ovvero lo .ser ID+ cut -d: -f1,3 /etc/passwd 31 #e-.( de* comando con tee Si log(a o(ni outp.t intermedio a((i.n(endo .na istanza di tee dopo o(ni pipe+ cut -f1,4 /etc/passwd | tee cut.txt | head -10 | tee head.txt 32 Analisi de**=outp.t di cut L=outp.t di cut 5 corretto. Si passa al comando s.ccessivo. 33 Analisi de**=o.tp.t di head L=outp.t di head mostra la stampa dei primi dieci .tenti in /etc/passwd. In realtà, si vo(liono (li .ltimi dieci .tenti. Si corre((e il comando .sando tail al posto di head+ tail 34 #e-.( de* comando con tee Si log(a o(ni outp.t intermedio a((i.n(endo .na istanza di tee dopo o(ni pipe+ cut -f1,4 /etc/passwd | tee cut.txt | tail | tee tail.txt 35 Analisi de**=o.tp.t di tail L=outp.t di tail 5 corretto. In de7nitiva, il comando corretto 5+ cut -f1,4 /etc/passwd | tail 36 Esercizio 1! (2 min.) Gisualizzate i trenta 7le piK (randi ne**=intero 7*e s1stem. Usate le named pipe per la com.nicazione tra processi. Spie(ate il -locco dei vari processi coinvolti. 37 Creazione named pipe con mkfifo Il comando 7nale ric$iede la colla-orazione di tre processi distinti. Pertanto, sono necessarie d.e named pipe per la com.nicazione. Si creano le named pipe con il comando mkfifo+ mkfifo fifo1 fifo2 38 Stampa di fi*e e dimensioni con find Si riversa ne**a named pipe fifo1 lo ST#OUI del comando se(.ente -asato su find, c$e stampa i 7le e le relative dimensioni+ find / -printf “%s %p\n” > fifo1 Il processo c$e ese(.e il comando si -locca al momento della scritt.ra, poic$> non esiste ancora .n lettore disponi-ile a cons.mare *=outp.t prodotto. 39 Ordinamento con sort Si ese(.e il comando di ordinamento sort -nrk1, le((endo le ri($e dalla named pipe fifo1 e scrivendo *=outp.t sulla named pipe fifo2+ sort -nrk1 < fifo1 > fifo2 Il processo c$e ese(.e il comando si -locca al momento della scritt.ra, poic$> non esiste ancora .n lettore disponi-ile a cons.mare *=outp.t prodotto. Il -locco di sort implica ancora il -locco di find, p.rtroppo. 40 Ordinamento con sort Si ese(.e il comando di ordinamento sort -nrk1, le((endo le ri($e dalla named pipe fifo1 e scrivendo *=outp.t sulla named pipe fifo2+ sort -nrk1 < fifo1 > fifo2 3on appena si ese(.e @.esto comando, find si sblocca e comincia a riversare il suo output.