background

()

In questa lezione vedremo come gestire i processi, cioè le “attività” che vengono create dai diversi comandi all’interno del nostro sistema operativo.Ogni comando lanciato nella shell, infatti, genera un processo che Linux esegue fino a quando non giunge a conclusione oppure non viene interrotto forzatamente.

E’ appena il caso di ricordare che Linux (come molti altri OS) è un sistema multitasking ed è in grado, pertanto, di gestire simultaneamente diversi processi.

Eseguire un comando in background
Altra caratteristica di Linux è che è possibile mandare in esecuzione in comando “dietro le quinte”. Questo vuol dire, in poche parole, che il sistema operativo svolge un processo lasciando libero l’utente di fare altre cose.

Com’è evidente una simile caratteristica risulta molto comoda quando si ha a che fare con comandi che possono richiedere diverso tempo per svolgere il loro compito. Per fare un esempio si supponga di voler lanciare un log analyzer (come, ad esempio, Analog) per processare un file di log di diverse centinaia di megabyte. Una simile operazione potrebbe richiedere anche diverse ore e sarebbe davvero scomodo dover attendere questo tempo prima che il terminale si liberi per svolgere altre operazioni.

In circostanze come queste, appunto, è possibile lanciare il comando in background. Per farlo è sufficiente aggiungere una “e commerciale” – & – al termine dell’istruzione:

analog /var/log/httpd/access_log &
Se provate a lanciare un comando in questo modo vi accorgerete che immediatamente dopo la pressione del tasto invio la linea di comando sarà nuovamente disponibile per nuovi comandi.

Prima di “liberarsi”, tuttavia, la shell risponderà al vostro comando in un modo del genere:

[4] 31177
Cosa significa questa stringa?

I due numeri visualizzati in risposta alla nostra istruzione identificano il processo all’interno del sistema operativo. Più precisamente:

Il primo risultato – [4] – identifica questo processo all’interno della nostra sessione di lavoro;
Il secondo numero – 31177 – è l’ID del processo, ossia l’identificativo univoco del nostro processo all’interno del sistema operativo.
Si noti che è anche possibile inviare una sequenza di comandi in background. Per farlo sarà sufficiente racchiudere i comandi tra parentesi tonde e separarli con un punto e virgola:

(analog /var/log/httpd/access_log_marzo;analog /var/log/httpd/access_log_aprile) &

Interrompere un processo e mandarlo in background
Poniamo di aver eseguito un comando e di esserci accorti, solo in un secondo momento, che la sua complessità richiederà diverso tempo per l’esecuzione. In questi casi la cosa migliore è stoppare il comando ed impostarlo in background.

Supponiamo di aver eseguito il comando analog normalmente:

analog /var/log/httpd/access_log
Per mandarlo in background sarà per prima cosa necessario procedere ad uno stop attraverso la pressione di CTRL+z. La risposta del server sarà qualcosa del genere:

[4]+ Stopped analog /var/log/httpd/access_log
Il comando analog in questo momento è sospeso e corrisponde ad un processo che ha come numero 4. Ricordate che questo non è l’ID del processo nel sistema ma identifica semplicemente il numero di processo nella vostra sessione di lavoro.

Per riprendere l’esecuzione del processo in background dovete utilizzare il comando bg seguito dal numero del processo:

bg 4
Linux vi risponderà in questo modo:

[4]+ analog /var/log/httpd/access_log &

Come avrete notato ora la linea del comando termina con il carattere & che sta ad indicare, appunto, che il processo è stato messo in background.

Mandare un processo in “primo piano”
Vediamo ora come soddisfare l’esigenza contraria a quella appena descritta: vediamo, ciioè, come mandare in foreground un processo che sta girando in background.

Per fare ciò si ricorre al comando fg seguito dal numero del processo (non l’ID). Tornando all’esempio precedente dovremmo fare:

NOTA: se non ricordate il numero del vostro processo potete sempre ricorrere al comando job che serve per stampare l’elenco di tutti i processi sospesi o in background con i relativi numeri.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?