Cosa sono i processi zombie in Linux e come ucciderli
Processo di zombi. Non tutti hanno sentito parlare di questa parola interessante ma spaventosa relativa al sistema operativo Linux. Su un personal computer, i processi zombie potrebbero non essere una minaccia per un utente normale, ma quando si tratta di server Linux, questi processi devono essere identificati e interrotti.
Tali processi possono causare problemi con la tabella dei processi del sistema e, a loro volta, manomettere il corretto funzionamento della macchina. Pertanto, in questo articolo, discuteremo in dettaglio dei processi zombi, insieme a una guida completa su come trovare e uccidere i processi zombi su una macchina Linux.
Cosa sono i processi zombi?
Ma prima di tutto ciò, è importante che tu sappia cosa sono realmente i processi zombi. Questi non sono altro che processi morti e defunti che occupano spazio nella tabella dei processi di sistema. Un blocco di controllo del processo o PCB è una struttura di dati che memorizza i dettagli associati ai singoli processi in esecuzione sul sistema.
La tabella del processo è costituita dall’ID del processo, da un collegamento al PCB e da altre informazioni utili relative al processo. I processi zombie hanno i propri ID di processo e le informazioni di gestione della memoria. Poiché il sistema operativo Linux ha un numero limitato di ID di processo disponibili, altri processi non possono utilizzare i PID finché il processo zombie non si arresta.
Sebbene uno o due processi zombie non causino interruzioni o problemi di prestazioni sul computer, un gran numero di tali processi può danneggiare il flusso di lavoro del sistema inondando la tabella dei processi e le risorse.
Cosa causa i processi zombie su Linux?
Per comprendere in dettaglio la causa alla base di un processo zombi, dovrai imparare come i processi si avviano e si arrestano in Linux. Il sistema operativo Linux monitora tutti i processi e i demoni in esecuzione su un computer. La tabella dei processi è un elenco di strutture che contiene tutti i processi attualmente in esecuzione sulla macchina.
Ciascuna voce di processo nella tabella del processo è costituita da un collegamento al blocco di controllo del processo di quel processo specifico. Il PCB memorizza i dettagli associati a quel particolare processo. Questi dettagli includono:
- Stato del processo : lo stato corrente del processo
- Numero processo : un numero univoco utilizzato per identificare il processo
- Contatore del programma : contiene le informazioni relative all’istruzione successiva
- Registri : elenco di tutti i registri della CPU utilizzati dal processo
- Apri elenco file : file utilizzati dal processo
- Informazioni sulla pianificazione della CPU : contiene le informazioni associate al tempo della CPU e alle risorse assegnate al processo
- Informazioni sulla gestione della memoria : include dettagli sulla quantità di memoria utilizzata dal processo
- Informazioni I / O : elenco dei dispositivi di input o output utilizzati dal processo
Linux utilizza i seguenti stati di processo per descrivere tutti i suoi processi.
- R : Processo in esecuzione
- S : Processo del sonno
- D : Processo di sonno ininterrotto
- T : processo terminato
- Z : processo Zombie
Ogni volta che un processo completa l’attività assegnata, il suo stato di processo viene impostato su Zombie o Z. Ogni processo ha un processo genitore che chiama una famiglia di funzioni denominate wait () che attende il cambio di stato di un processo. Ad esempio, se lo stato del processo cambia da Running a Zombie , verrà attivato il metodo wait () .
Il metodo wait () di solito elimina il blocco di controllo del processo relativo a quel processo zombie e quindi rimuove la voce di quel processo dalla tabella dei processi.
Ma a volte, a causa dello scarso sviluppo di un programma, il processo genitore non chiama la funzione wait () . Di conseguenza, il sistema non elimina il PCB del processo zombie. Anche la voce della tabella dei processi per quel processo specifico rimane intatta.
Ciò garantisce al processo zombi una durata infinita. Poiché il sistema non può terminare il processo, la voce del processo non viene mai eliminata e il PID non viene mai liberato.
Come trovare i processi zombi?
Il primo passaggio per rimuovere i processi zombie dal sistema è analizzare quale processo ha lo stato di processo Zombie . Anche se non sarai in grado di terminare questi processi direttamente poiché il sistema li ha già rimossi dalla memoria, puoi terminare il processo genitore ad essi associato.
Innanzitutto, devi verificare se la tabella dei processi del tuo sistema ha un processo zombie. Puoi farlo facilmente usando il comando in alto . Apri semplicemente il tuo terminale e digita:
top
Vedrai un output simile a questo. Notare il conteggio dei processi zombie nella parte superiore della finestra del terminale. Se l’output è zero, non devi preoccuparti di nulla.
È possibile elencare le informazioni relative a questi processi zombie reindirizzando il comando ps con egrep . Egrep è un’estensione del comando grep in Linux che tratta tutti i pattern come una stringa regex estesa.
Digita il seguente comando per elencare tutti i processi zombie:
ps aux | egrep "Z|defunct"
Il comando di cui sopra cercherà le righe che contengono Z o defunct nell’output generato dal comando ps. L’output consiste in un elenco dei processi zombie in esecuzione sul sistema.
Uccidere i processi di zombi usando il comando kill
Ora che sai quali processi zombi stanno attualmente consumando le tue risorse di sistema, è tempo di uccidere questi processi.
Sebbene il modo più semplice per uccidere i processi zombie sia riavviare il computer, a volte questa non è un’opzione fattibile, soprattutto se stai amministrando un server.
Per uccidere i processi zombi senza spegnere il server, annota l’ID del processo di qualsiasi processo zombi. Dalla sezione precedente, possiamo vedere che il PID del processo zombie era 18614. Quindi, usa questo PID per trovare l’ID del processo genitore.
ps -o ppid= -p 18614
Produzione:
18613
Verificare se l’ID del processo padre esiste utilizzando il comando ps .
ps -e | grep 18613
Ora che abbiamo confermato l’esistenza del processo genitore, è tempo di ucciderlo. Passa il flag -SIGKILL con il comando kill come segue:
sudo kill -SIGKILL 18613
Dopo aver terminato il processo genitore, il sistema eliminerà il processo zombie e lo rimuoverà automaticamente dalla tabella dei processi.
Gestione efficiente dei processi su Linux
Ogni amministratore di sistema deve dare la priorità ai processi di monitoraggio in esecuzione su una macchina Linux. Sebbene i processi zombie non siano necessariamente dannosi per il sistema, possono causare problemi di prestazioni se sono presenti in numero elevato.
Se sei un utente Linux principiante e non hai idea di come il sistema operativo Linux gestisce i processi, imparare prima cosa sono i processi è un buon punto di partenza.