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). Ci sono però delle occasioni in cui questo 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. A questo punto avete due possibilità: la prima, più distruttiva, consiste nell'arrestare l'esecuzione (kill) e riavviare il comando quando avrete il tempo di aspettare; per farlo dovreste digitare C-c (Control+c): questo comando vi riporta al prompt.

Ma 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 C-z per sospendere il processo:

$ cp -R images/ /shared/ 2>/dev/null
  # Adesso premete C-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 C-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 trademark registrato di Linus Torvalds. Tutti gli altri copyright e trademark appartengono ai rispettivi proprietari.
A meno che non sia specificato diversamente, tutto il contenuto di queste pagine e tutte le immagini sono Copyright MandrakeSoft S.A. e MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/