[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]