Nella lezione precedente della nostra guida Linux abbiamo vista cosa sono i processi ed in che modo vengono generati. Abbiamo visto che i processi di sistema (detti demoni) agiscono in background, cioรจ senza una interazione diretta con l’utente. Si tratta di processi che godono di una certa autonomia in quanto, appunto, l’interazione con l’utente non รจ indispensabile affinchรจ il processo possa svolgere la propria funzione.
Anche i processi lanciati dagli utenti, tuttavia, possono essere eseguiti in background (diventando del tutto simili ai demoni di sistema). In questa lezione vediamo come lanciare un processo in background.
Indice
Eseguire un comando in background
Nei sistemi Linux รจ 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:
fg 4
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.