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.
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.
Un commento su “Stop ai processi Zombie – I parte”