Almeno una volta nella vita, vi sarà capitato di assistere ad un processo che non si arresta. In quel momento, non potete spegnere o riavviare il vostro sistema GNU/Linux, come fare per risolvere il problema?
Questo articolo oltre a esporre alcuni concetti importanti sui processi, mostra l’utilizzo del comando “kill” come soluzione a situazioni alquanto sgradevoli in grado di terminare qualsiasi processo (in realtà non tutti i processi). Ma prima della pratica è il momento di un pò di teoria.
UNA DIFFERENZA FONDAMENTALE: PROCESSO E PROGRAMMA
Prima di iniziare a parlare di processi è fondamentale capire la differenza tra processo e programma: il primo è la rappresentazione del kernel di un programma in esecuzione, mentre il secondo è un file memorizzato che contiene il codice vero e proprio, alcune aree dati e altro ancora. Tale differenza è riassunta nella seguente immagine.

(Differenza tra processo e programma)
COME NASCE IL NOME DI UN PROCESSO, OSSIA IL PID?
L’identificato del processo o PID ossia il nome che il Kernel assegna ad un processo è un numero univoco descritto dal tipo di dato opaco (pid_t) intero. Tale numero non è negativo ed è attribuito in modalità circolare:
next_pid = (prev_pid + 1) % max_pid
La cui sopra significa: il prossimo PID è determinato dal numero di PID precedente + 1 nella percentuale massima di PID consentita.
MA IL PROCESSO, IN QUALI STATI SI PUO’ TROVARE?
Gli stati in cui si può trovare un processo sono essenzialmente quattro:
- In esecuzione: il processo è in esecuzione (il suo codice)
- Pronto: il processo è pronto a proseguire/iniziare la sua esecuzione
- Bloccato: il processo resta in attesa di un evento
- Terminato: il processo risulta terminato
In maniera abbastanza semplice possiamo riassumere con il seguente grafico gli stati di un processo.

(I vari stati di un processo)
Un commento su “Stop ai processi Zombie – I parte”