Un processo nello stato terminato è un altro nome per questo. Viene pulito dalla memoria usando il suo processo genitore. Quando il processo genitore non viene informato della modifica, il processo figlio diventa il processo di zombi e non ottiene alcun segnale di terminazione in modo che possa lasciare la memoria. In Linux, ogni volta che un processo viene rimosso dalla memoria, il suo processo genitore viene informato sulla rimozione. Questo processo rimane nella memoria fino a quando non notifica il processo genitore.
Ciò significa che il processo morto non viene rimosso immediatamente dalla memoria e continua nella memoria del sistema diventando così un processo di zombi. Per rimuovere un processo di zombi, il processo genitore chiama la funzione wait (). Una volta che la funzione wait () viene chiamata in gioco, il processo di zombi viene completamente rimosso dal sistema.
Uccidere un processo di zombi
Prima di trasferirsi per uccidere il processo di zombi, discuteremo prima dei rischi del processo di zombi e delle cause del processo di zombi in corso. Inoltre, impareremo di più sul processo di zombi per facilitare la comprensione del processo di uccisione.
Qual è la causa del processo di zombi
Ci possono essere due principali cause del processo di zombi. Il primo è quello in cui il processo genitore non è in grado di chiamare la funzione wait () quando è in esecuzione il processo di creazione del bambino che porta a ignorare il sigchld. Ciò può causare il processo di zombi. Il secondo è quello in cui l'altra applicazione può influire sull'esecuzione del processo genitore a causa di una cattiva codifica o contenuto dannoso in essa.
In altre parole, possiamo dire che il processo di zombi è causato quando il processo genitore ignora le modifiche allo stato del processo figlio o non può verificare lo stato del processo figlio, quando il processo figlio termina il PCB non viene cancellato.
Il processo di zombi rappresenta un rischio
Il processo di zombi non comporta alcun rischio, usano solo una parte della memoria nel sistema. La tabella di processo è di dimensioni ridotte ma l'ID della tabella in cui viene memorizzato il processo di zombi non può essere utilizzato fino a quando non viene rilasciato dal processo zombi. Ma nel caso in cui ci siano molti processi di zombi che riservano la posizione della memoria e non è rimasto alcun spazio di memoria per altri processi, diventa difficile per altri processi da eseguire.
Trovare un processo di zombi
Prima di uccidere il processo di zombi è necessario trovarli. Per trovare il processo zombi eseguiremo il seguente comando nel terminale:
Linux@Linux-Virtualbox: ~ $ PS Aux | egrep "z | defunto"
Nel comando sopra, "PS" sta per lo stato di processo viene utilizzato per visualizzare lo stato del processo in esecuzione nel sistema insieme al comando PS. Abbiamo superato il flag aux in cui "a" indica i dettagli di tutti i processi associati nel terminale, "u" indica i processi che si trovano nell'elenco degli utenti e la "x" indica i processi che non vengono eseguiti dal terminale. In combinazione, possiamo dire che viene utilizzato per stampare tutti i processi di esecuzione che sono archiviati nella memoria.
La seconda opzione passata "EGREP" è uno strumento di elaborazione utilizzato per recuperare le espressioni o i modelli in una posizione specificata. Infine, abbiamo superato la parola chiave "z | defunct" che indica il processo di zombi che deve essere recuperato nella memoria. Quando eseguiamo il comando, otterremo il seguente output, che mostra il processo di zombi nel sistema insieme al suo "PID".
Produzione:
Utente PID %CPU %Mem vsz RSS TTY Stat Tempo Tempo
Linux 33819 0.0 0.0 18008 724 punti/0 s+ 20:22 0:00 Grep -e - -color = auto z | defunto
I processi di zombi sono già processi morti ma il processo genitore non è in grado di leggere il suo stato e non può essere rilasciato dalla memoria. Quindi, il processo morto non può essere ucciso. Possiamo solo fare per loro per consentire al processo genitore di leggere lo stato figlio in modo che possa essere eseguito e rimosso dalla tabella di processo. Per questo, eseguiremo il comando menzionato di seguito.
Linux@linux -virtualbox: ~ $ ps -o ppid = -p 33819
Nel comando sopra, abbiamo provato a ottenere l'ID genitore del processo di zombi. Dopo aver ottenuto l'ID genitore, eseguiremo il seguente comando per uccidere il processo di zombi inviando il SIGCHLD al processo genitore che consente al processo genitore di leggere lo stato figlio:
Linux@linux -virtualbox: ~ $ kill -s sigchld parent_pid
Nel comando sopra, passiamo il segnale all'ID genitore per uccidere il processo di zombi dell'ID genitore passato ad esso. Dopo l'esecuzione del comando sopra, si sposta semplicemente alla riga successiva senza stampare alcun output sul terminale nel caso in cui non esista ID genitore. Per verificare il processo se il processo di zombi viene ucciso o meno, è possibile eseguire il comando che abbiamo già eseguito per trovare il processo di zombi.
Proviamo un altro modo per uccidere il processo di zombi che viene fatto uccidendo il processo genitore stesso. Questo è il modo più efficiente per uccidere il processo di zombi perché rimuoverà completamente l'intero processo e non permetterà a lo zombi di risalire di nuovo. Per questo, eseguiremo il comando di seguito:
Linux@linux -virtualbox: ~ $ kill -9 parent_pid
Dopo aver eseguito il comando sopra, consentiamo al sistema di uccidere il processo genitore.
Conclusione
Abbiamo discusso brevemente del processo di zombi e anche le cause e la procedura per uccidere questi processi. Prima di andare al nostro processo di uccisione, abbiamo cercato di spiegare le ragioni della loro causa e anche i modi per identificarli usando comandi semplici.