Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Nessuna passione priva la mente cos? completamente delle sue capacit? di agire e ragionare quanto la paura.

Edmund Burke 

Sondaggio:

Quale TG segui abitualmente?

TG1
TG2
TG3
TG4
TG5
StudioAperto
TG7
Non guardo TG

visualizza risultati


 

Multitasking: background e foreground

Il Job control (controllo dei job) si riferisce alla possibilità di mettere i processi (essenzialmente la stessa cosa dei programmi) in background (sullo sfondo) e di riportarli in foreground (in primo piano), cioè poter eseguire un processo mentre voi state facendo qualcos'altro, ma mantenendone il controllo per potergli comunicare qualcosa o per poterlo fermare. In Unix, lo strumento principale per controllare i job è la shell: tiene traccia dei job per conto vostro, se imparate il suo linguaggio.

Le due parole più importanti in questo linguaggio sono fg, per "foreground", e bg, per "background". Per vedere come funzionano, usiamo il comando yes al prompt.

/home/larry$ yes

Questo comando ha lo strano effetto di creare una lunga colonna di y nel bordo sinistro dello schermo, più veloce di quello che riuscite a vedere. Ci sono delle buone ragioni per l'esistenza di questo strano comando. Talvolta i comandi chiedono conferma, cioè chiedono di rispondere "yes" a delle domande. Il comando yes permette di automatizzare la risposta a queste domande. Per fermare il comando, normalmente dovete premere + , ma questa volta premete + . Sembra che si sia fermato, e viene stampato un messaggio prima del prompt più o meno così:

[1]+ Stopped yes

Significa che il processo yes è stato sospeso in background. Potete farlo ripartire nuovamente con il comando fg al prompt, che lo riporterà in primo piano. Se volete, potete fare altro prima, mentre è sospeso. Provate alcuni ls o altro prima di rimetterlo in foreground. Una volta ritornato in foreground, ricominceranno le y, veloci come prima. Non dovete preoccuparvi che il programma "immagazzini" delle y mentre il job è sospeso: quando un programma è sospeso, l'intero programma non viene più eseguito finché non lo fate ritornare in vita (e ora potete premere + per cancellarlo in modo definitivo, una volta che lo avete sopportato abbastanza).

Vediamo in dettaglio il messaggio lasciato dalla shell:

[1]+ Stopped yes

Il numero tra parentesi è il numero del job di questo processo, e sarà usato quando dovrete riferirvi in modo specifico a quel job (naturalmente, siccome il controllo dei job riguarda l'esecuzione di più processi, è necessario un metodo per distinguerli l'uno dall'altro). Il carattere + che segue le parentesi comunica che quello è il "job corrente", cioè il job spostato per ultimo dal foreground al background.

Se scrivete fg, metterete in foreground il job marcato con il + (ne parleremo ancora più avanti, quando parleremo dell'esecuzione di più job contemporaneamente). La parola Stopped significa che il job è sospeso: il job non è morto, ma non è più in esecuzione; Linux lo ha salvato in uno speciale stato di sospensione, pronto a tornare in azione appena qualcuno lo richieda. Infine, yes è il nome del processo che è stato fermato.

Prima di proseguire, cancelliamo questo job ed avviamolo in modo diverso. Il comando si chiama kill e può essere usato così:

/home/larry$ kill %1
[1]+ Stopped yes

Il messaggio che il job è sospeso è ingannevole. Per vedere se è ancora in vita (cioè in esecuzione o in stato sospeso), digitate jobs:

/home/larry$ jobs
[1]+ Terminated yes

Ecco qui! Il job è stato terminato! È possibile che jobs non restituisca niente, per indicare che non ci sono jobs in esecuzione in background). Se avete appena cancellato un job, e digitando jobs non viene mostrato nulla, allora la cancellazione è stata compiuta con successo. Normalmente viene comunicato che il job è stato "terminato" (terminated) o "ucciso" (killed). Adesso avviamo yes nuovamente, così:

/home/larry$ yes > /dev/null

Se avete letto la sezione sulla redirezione dell'input e dell'output, saprete che questo sta mandando l'output di yes nel file speciale /dev/null. /dev/null è un buco nero che assorbe ogni output che gli si manda (potete immaginare che il flusso di y finisca fuori dal computer e scompaia in un buco nel muro, se questo vi rende più contenti). Dopo aver digitato questo comando, non otterrete indietro il prompt, ma non vedrete nemmeno la colonna di y. Anche se l'output viene mandato a /dev/null, il job è ugualmente in esecuzione in foreground. Come al solito, potete sospendere il job premendo + ; fatelo adesso per ottenere di nuovo il prompt.

[1]+ Stopped yes >/dev/null
/home/larry$

Hmm... c'è un modo per far sì che esso funzioni in background, così da lasciarci il prompt per altri lavori interattivi? Il comando da usare è bg:

/home/larry$ bg
[1]+ yes >/dev/null &
/home/larry$

Adesso dovete avere fiducia in me: dopo che avete inserito bg, yes > /dev/null è tornato a funzionare nuovamente, ma questa volta in background. Infatti, se fate qualcosa al prompt, come ls e simili, noterete che la macchina è leggermente rallentata (convogliare un continuo flusso di caratteri richiede comunque del lavoro!). Oltre a questo, comunque, non ci sono altri effetti. Potete fare qualsiasi cosa vogliate al prompt, e yes continuerà a mandare il suo output nel buco nero.

Ci sono adesso due modi diversi per cancellarlo: con il comando kill che avete appena imparato, o rimettendo il job in foreground e premendo il tasto di interruzione( + ). Proviamo il secondo metodo, solo per capire meglio le relazioni tra fg e bg:

/home/larry$ fg
yes >/dev/null
[adesso e' nuovamente in foreground. Immaginiamo che io abbia premuto ctrl+c per terminarlo]
/home/larry$

Ecco, è andato.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso