COME SONO DEFINITI GLI STATI DI UN PROCESSO IN UN SISTEMA GNU/Linux?
In un sistema GNU/Linux gli stati pronto e in esecuzione convergono in un unico stato ossia lo stato TASK_RUNNING come mostrato dall’immagine seguente.
L’immagine precedente mostra lo stato che un processo può assumere in un sistema GNU/Linux. Partendo dalla creazione,il fork(), il processo può essere pronto per essere eseguito (TASK_RUNNING PRONTO) e resta in “coda” fino al momento in cui “lo schedulatore” non lo pone in esecuzione, e lo consegna alla CPU (TASK_RUNNING IN ESECUZIONE). A questo punto vi sono due strade, il processo resta in attesa che termini un evento e può assumere essenzialmente due stati (TASK_INTERRUPTIBLE o TASK_UNINTERRUPTIBLE) con o senza la gestione dei segnali, o può terminare la propria esecuzione (EXIT_ZOMBIE e di seguito EXIT_DEAD). Nel momento esatto in cui il processo esce dal sistema la CPU passa ad eseguire altri processi (che sono nello stato TASK_RUNNING PRONTO).
In dettaglio ecco una spiegazione degli stati che un processo può assumere:
Lo stato TASK_RUNNING indica che il processo è in esecuzione o in attesa per l’esecuzione (come menzionato poche righe sopra).
Lo stato TASK_INTERRUPTIBLE indica che il processo è in attesa che un evento si verifichi: il rilascio di alcune risorse del sistema che il processo sta aspettando, o un segnale che lo “risveglia” portandolo nello stato TASK_RUNNING. Tipicamente, il blocco delle chiamate I/O (ai dischi o alla rete) pongono il processo nello stato TASK_INTERRUPTIBLE; Una volta che la chiamata è terminata e i dati sono pronti, lo stato del processo viene posto nello stato TASK_RUNNING.
Lo stato TASK_UNINTERRUPTIBLE è simile allo stato TASK_INTERRUPTIBLE; Il processo in tale condizione non può essere interrotto da segnali fino al momento del suo completamento. Quando ciò accade, esso può essere risvegliato da un call di sistema esplicita e “portato” in uno “stato” TASK_RUNNING.
Lo stato TASK_KILLABLE è simile allo stato TASK_UNINTERRUPTIBLE però in tale condizione, il processo ha la capacità di rispondere ai segnali critici di sistema.
Lo stato TASK STOPPED in cui l’esecuzione del processo è bloccata. Tale condizione si verifica alla ricezione dei segnali SIGSTOP, SIGTSTP e così via. Il processo potrebbe essere rieseguito alla ricezione del segnale SIGCONT.
Lo stato TASK_TRACED è la condizione di un processo che è monitorato da altri processi come un programma di debug.
Lo stato EXIT_ZOMBIE: il processo è terminato ma in maniera anomala.
Lo stato EXIT_DEAD rappresenta lo stato finale del processo in cui tutto è andato a buon fine.
Un commento su “Stop ai processi Zombie – I parte”