3.6. Avviare e gestire i processi in background: il controllo dei job

Avrete già notato che quando lanciate un comando da un terminale normalmente dovete attendere che il comando abbia terminato l'esecuzione prima di riavere il controllo della shell: questo avviene quando eseguite i comandi in foreground (ovvero in primo piano). In alcune occasioni, tuttavia, questo comportamento non è desiderabile.

Immaginate ad esempio di voler copiare ricorsivamente il contenuto di una grossa directory in un'altra. Volete anche ignorare gli eventuali errori, quindi redirigete l'output del canale di errore verso /dev/null:

cp -R images/ /shared/ 2>/dev/null

Questo comando potrebbe richiedere anche diversi minuti prima che l'operazione sia terminata. A questo punto avete due possibilità: la prima, più distruttiva, consiste nell'arrestare l'esecuzione (kill) e ripetere il comando quando avrete il tempo di aspettare; per farlo dovreste digitare Ctrl+c (Control+c): questo comando vi riporta al prompt. Ma aspettate un momento, non fatelo! Continuate a leggere.

Supponiamo che vogliate che il comando venga eseguito mentre voi fate qualcos'altro. La soluzione consiste nello spostare il processo in background. Per farlo, digitate Ctrl+z per sospendere il processo:

$ cp -R images/ /shared/ 2>/dev/null
  # Adesso premete Ctrl-z
[1]+  Stopped                 cp -R images/ /shared/ 2>/dev/null
$

e vi ritroverete di nuovo al prompt. A questo punto il processo è in standby, in attesa che voi lo riattiviate (come risulta dalla dicitura Stopped). Ed è ciò che vorrete fare, ma in modo tale che il processo riparta in background. Digitate bg (che sta per BackGround) per ottenere questo risultato:

$ bg
[1]+ cp -R images/ /shared/ 2>/dev/null &
$

In questo modo il processo riprenderà l'esecuzione, ma questa volta in background, il che viene indicato dal simbolo & (e commerciale) alla fine della linea di comando. Subito dopo ritornerete al prompt e potrete continuare a lavorare. Un processo che viene eseguito in background viene indicato con il termine job.

Ovviamente potete anche lanciare i processi in modo tale che vengano eseguiti in background, aggiungendo una & alla fine della linea di comando. Ad esempio, potete far eseguire fin dall'inizio la procedura di copia della directory in background digitando:

cp -R images/ /shared/ 2>/dev/null &

Se lo desiderate, potete anche riportare il processo in primo piano e attendere che venga completato usando il comando fg (ForeGround). Per riportarlo in background, usate la sequenza Ctrl+z, bg.

Potete anche lanciare diversi job con questo sistema; in questo caso a ciascun job verrà assegnato un numero consecutivo. Il comando jobs elenca tutti i job associati alla shell corrente. Il job contrassegnato da un carattere + è l'ultimo processo che è stato avviato in background. Potete riportare un qualsiasi processo in primo piano digitando il comando fg <n> dove <n> è il numero del job, ad esempio fg 5.

Notate che con questi comandi potete anche avviare o fermare applicazioni full-screen (ovvero scritte in modo tale da girare a tutto schermo), come ad esempio less o un editor di testo come Vi, e riportarle in primo piano quando volete.


Tux on Star from MandrakeSoft Linux è un marchio registrato di Linus Torvalds. Tutti gli altri marchi e copyright appartengono ai rispettivi proprietari.
Se non diversamente specificato, i diritti di tutto il contenuto di queste pagine e di tutte le immagini sono proprietà di MandrakeSoft S.A. e MandrakeSoft Inc. 2001.
http://www.mandrakelinux.com/