[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
In presenza di un ambiente in multiprogrammazione è importante il controllo dei processi in esecuzione. Un processo è un singolo eseguibile in funzione, ma un comando può generare diversi processi.
Il comando fondamentale per il controllo dei processi è ps.
$ ps x[Invio]
| PID TTY STAT TIME COMMAND 077 1 SW 0:01 (login) 078 2 SW 0:01 (login) 091 1 S 0:01 -bash 132 2 S 0:01 -bash 270 1 R 0:00 ps | 
In questo caso ps mostra che sono in funzione due copie di bash (la shell Bash), ognuna su un terminale differente (in questo caso si tratta della prima e della seconda console virtuale di un sistema GNU/Linux): TTY 1 e 2. L'unico programma in esecuzione è lo stesso ps, che in questo esempio è stato avviato dal primo terminale.
Attraverso l'opzione f, si può osservare la dipendenza tra i processi.
$ ps xf[Invio]
| PID TTY STAT TIME COMMAND 077 1 SW 0:01 (login) 091 1 S 0:01 \_ -bash 275 1 R 0:00 \_ ps -f 078 2 SW 0:01 (login) 132 2 S 0:01 \_ -bash | 
In un sistema GNU/Linux esiste il programma pstree che offre un modo graficamente più aggraziato di osservare la dipendenza tra i processi.
$ pstree[Invio]
| init-+-crond
     |-kflushd
     |-klogd
     |-kswapd
     |-login---bash
     |-login---bash---pstree
     |-4*[mingetty]
     |-4*[nfsiod]
     |-portmap
     |-rpc.mountd
     |-rpc.nfsd
     |-syslogd
     `-update
 | 
Mentre prima si vedevano solo i processi connessi ai terminali, adesso vengono visualizzati tutti i processi in funzione in modo predefinito. L'elenco cambia a seconda della configurazione del proprio sistema.
I processi vengono eliminati automaticamente una volta che questi terminano regolarmente. A volte ci può essere la necessità di eliminare forzatamente un processo.
Per verificare questa situazione si può passare sulla seconda console virtuale e da lì avviare un programma inutile che viene poi eliminato attraverso la prima console.
[Alt F2]
Se fosse necessario eseguire l'accesso, è questo il momento di farlo.
$ yes[Invio]
| y y y y ... | 
Attraverso yes si ottiene un'emissione continua di lettere «y». Si può passare alla prima console e osservare la situazione.
[Alt F1]
$ ps x[Invio]
| PID TTY STAT TIME COMMAND 077 1 SW 0:01 (login) 078 2 SW 0:01 (login) 091 1 S 0:01 -bash 132 2 S 0:01 -bash 311 2 R 0:26 yes | 
Si decide di eliminare il processo generato da yes attraverso l'invio di un segnale di conclusione.
$ kill 311[Invio]
Il numero 311 è il numero abbinato al processo, o PID, che si ottiene osservando le informazioni emesse da ps. Tornando sulla console in cui è stato eseguito yes si può osservare che questo ha terminato di funzionare.
[Alt F2]
| ... y y Terminated | 
Per mezzo della shell è possibile avviare dei comandi sullo sfondo, ovvero in background, in modo che si renda nuovamente disponibile l'invito per inserire altri comandi.
$ yes > /dev/null &[Invio]
Questo comando avvia yes dirottando l'output nel file /dev/null che in realtà è un dispositivo speciale paragonabile a una pattumiera senza fondo (tutto ciò che vi viene scritto è eliminato). Il simbolo e-commerciale (&), posto alla fine del comando, dice alla shell di eseguirlo sullo sfondo.
Naturalmente, ha senso eseguire un comando sullo sfondo quando questo non richiede input da tastiera e non emette output sul terminale.
Il controllo dei processi avviene essenzialmente attraverso ps e kill. La shell fornisce generalmente una forma di controllo sui comandi avviati attraverso di essa; questi vengono definiti normalmente job di shell.
Il capitolo 65 e i successivi trattano meglio di questo argomento.
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome controllo_dei_processi.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]