3.4.13 Job management

Sulla riga di comando della shell è possibile indicare l’esecuzione di più comandi, come mostrato nella sez. 3.4.12. In genere, si fa riferimento all’insieme dei comandi impartiti tramite una riga di comando della shell col termine job o process group (raggruppamento di processi). Dunque, un job rappresenta l’indicazione dell’esecuzione di una riga di comando. Ad esempio

 
$ ls  
lancerà in esecuzione un job che contiene il solo processo ls. Mentre indicando di eseguire

 
$ ls | less  
la shell lancerà in esecuzione un job che contiene i processi ls e less, in modo tale che l’output del primo processo (ls) costituisca l’input del secondo (less).

La shell permette di gestire i job (in genere ci si riferisce a tale funzionalità col termine job control). Infatti per mezzo di comandi opportuni è possibile sospendere, riattivare un job e portarlo in background o in foreground.

Con il comando jobs si può visualizzare l’elenco dei job attualmente in esecuzione. In tale elenco, il job corrente, ovvero quello che è stato in foreground più di recente (in genere il più recente) è contrassegnato dal simbolo ‘+’ e quello immediatamente precedente dal simbolo ‘-’.

Un job che viene lanciato dalla riga di comando, in genere viene eseguito dalla shell in foreground, ovvero in modalità interattiva con l’utente. In tal caso la shell attende la sua terminazione prima di visualizzare un altro prompt ed essere quindi pronta a ricevere un altro comando dall’utente. Tecnicamente i processi sono considerati in foreground quando il loro PGID corrisponde al PGID del terminale. Tali processi sono in grado di ricevere tutti i segnali inviati dalla tastiera e sono i soli a cui è permesso interagire con la tastiera e lo schermo.

È possible indicare esplicitamente alla shell di eseguire un job in background, ovvero in modalità non interattiva con l’utente. In tal caso la shell non attende la sua terminazione e visualizza subito un prompt per indicare che è pronta a ricevere un altro comando dall’utente. In realtà, comparirà sullo schermo anche un’indicazione con la seguente sintassi

 
[job] lastPID  
dove

Ad esempio l’indicazione

 
[1] 25647  
indica l’avvio del job numero 1 ed il PID dell’ultimo processo che ne fa parte è il 25647.

Si tenga presente che a tali processi (in background) non è permesso di interagire con la tastiera e lo schermo e qualunque tentativo in proposito genera un segnale SIGTTIN o SIGTTOU che, per default, sospende il processo.

Un processo può essere sospeso tramite l’invio di un segnale di sospensione riproducibile con la tastiera tramite la combinazione di tasti (^Z)13. Si può sospendere un processo anche per mezzo della combinazione di tasti (^Y) ed in questo modo il processo verrà sospeso non appena tenterà di leggere dalla tastiera.

Ad un job può essere fatto riferimento tramite una sequenza di caratteri che inizia col simbolo ‘%’. In particolare

I comandi interni fg e bg sono utilizzati per poter riprendere l’esecuzione di un job rispettivamente in foreground e in background, ed hanno la seguente sintassi

 
$ fg job
$ bg job  
dove job è l’indicazione del job da portare in esecuzione in foreground o background, come riportato precedentemente (se job non è specificato, viene fatto riferimento al job corrente).

Un job può essere portato in foreground o background anche semplicemente specificando sulla riga di comando il suo riferimento. Ad esempio

 
$ %3  
porterà in esecuzione in foreground il job identificato dal numero 3, mentre

 
$ %3 &  
lo porterà in esecuzione in background.

[da completare ...]

Impostazione caratteri (localizzazione, layout ...)

[da completare ...]