Come uccidere i processi di zombie su Linux

Nov 25, 2024
Linux
Fatmawati Achmad Zaenuri / Shutterstock

I programmi che sono scarsamente scritti o si esibiscono male possono andarsene Processi di zombie in agguato all'interno del tuo computer Linux. Scopri come vengono creati gli zombi e come puoi finalmente metterli a riposare.

Come gli stati di processo funzionano su Linux

Linux, ovviamente, deve tenere traccia di tutte le applicazioni e dai demoni in esecuzione sul tuo computer. Uno dei modi che fa questo è mantenendo la tabella dei processi. Questo è un elenco di strutture nella memoria del kernel. Ogni processo ha una voce in questo elenco che contiene alcune informazioni a riguardo.

Non c'è molto da ciascuna delle strutture della tabella di processo. Tengono il ID Processo , alcuni altri elementi di dati e un puntatore al blocco di controllo del processo (PCB) per tale processo.

È il PCB che tiene i tanti dettagli che Linux deve cercare o impostare per ogni processo. Il PCB viene anche aggiornato come processo è stato creato, dato il tempo di elaborazione e infine distrutto.

Il PWB Linux contiene oltre 95 campi. È definito Come una struttura chiamata task_struct.h. , e sono lunghe oltre 700 righe. Il PCB contiene i seguenti tipi di informazioni:

  • Stato di processo : Gli stati sono descritti di seguito.
  • Numero di processo : Il suo identificativo univoco all'interno del sistema operativo.
  • Contatore di programma : Quando questo processo è il prossimo dato accesso alla CPU, il sistema utilizzerà questo indirizzo per trovare le prossime istruzioni del processo che dovrebbe essere eseguita.
  • Registri : L'elenco dei registri della CPU utilizzati da questo processo. L'elenco potrebbe contenere accumulatori, registri indicizzati e puntatori di stack.
  • Apri elenco di file : File associati a questo processo.
  • Informazioni di pianificazione della CPU : Utilizzato per determinare quanto frequentemente, e per quanto tempo, il tempo di elaborazione della CPU viene assegnato a questo processo. La priorità del processo, i puntatori di pianificazione delle code e altri parametri di pianificazione devono essere registrati nel PCB.
  • Informazioni sulla gestione della memoria : Dettagli sulla memoria Questo processo utilizza, ad esempio gli indirizzi di inizio e fine della memoria del processo e dei puntatori delle pagine di memoria.
  • I / O Informazioni sullo stato : Eventuali dispositivi di uscita o di uscita utilizzati dal processo.

Lo "stato di processo" può essere uno dei seguenti:

  • R: Un processo in esecuzione o declable. Significato che significa che riceve cicli e esecuzione della CPU. Un processo runnicabile è pronto per funzionare e in attesa di uno slot della CPU.
  • S: Un processo di sonno. Il processo sta aspettando un'azione da completare, ad esempio un'operazione di uscita o di uscita o per una risorsa per diventare disponibile.
  • D: Il processo è in uno stato di sonno ininterrotto. Utilizza una chiamata di sistema di blocco e non può continuare finché le chiamate di sistema non sono state completate. A differenza dello stato "Sleep", un processo in questo stato non risponderà ai segnali fino a quando la chiamata di sistema non sarà completata e l'esecuzione è stata restituita al processo.
  • T: Il processo è terminato (fermato) perché ha ricevuto il SIGSTOP. segnale. Esso risponderà solo al Sigkill. o Sigcont. segnali, che uccidono il processo o si istruiscono a continuare, rispettivamente. Questo è ciò che sta succedendo quando si scambia da primo piano ( FG. ) a sfondo ( BG) compiti.
  • Z: Un processo zombie. Quando un processo è completato, non solo svanisce. Libera la memoria che si sta utilizzando e si rimuove dalla memoria, ma la sua voce nella tabella dei processi e il PCB rimangono. Il suo stato è impostato su Exit_zombie. e il suo processo genitore è notificato (dal Sigchld. segnale) che il processo figlio ha finito.

Nello stato zombie, il processo genitore chiama uno dei aspettare() Famiglie di funzioni quando il processo figlio è stato creato. Quindi attende un cambiamento di stato nel processo figlio. Il processo figlio è stato fermato, continuò o ucciso da un segnale? Ha terminato correndo attraverso il completamento naturale del suo codice?

Se il cambiamento di stato è uno che significa che il processo figlio ha smesso di funzionare, il codice di uscita è letto. Quindi, il PCB del bambino viene distrutto e la sua voce nella tabella di processo viene rimossa. Idealmente, tutto ciò accade in un batter d'occhio e i processi nello stato zombie non esistono per molto tempo.

IMPARENTATO: Come eseguire e controllare i processi di sfondo su Linux

Cosa causa i processi di zombie su Linux?

Un processo genitore mal scritto potrebbe non chiamare il aspettare() funzione quando viene creato il processo figlio. Ciò significa che nulla sta guardando i cambiamenti di stato nel processo figlio, e il Sigchld. il segnale verrà ignorato. O forse un'altra applicazione sta influenzando l'esecuzione del processo genitore, a causa di scarsa programmazione o intenti maliziosi.

Tuttavia, se il processo genitore non sta guardando per le modifiche allo stato nel processo figlio, il corretto servizio di pulizia del sistema non si verificherà. Il PCB e la voce nella tabella dei processi non verranno rimossi quando il processo figlio termina. Ciò si traduce nello stato zombie non viene mai rimosso dal PCB.

Gli zombie usano un po 'di memoria, ma di solito non rappresentano un problema. La voce nella tabella dei processi è piccola, ma finché non viene rilasciata, l'ID del processo non può essere riutilizzato. Su un sistema operativo a 64 bit, è improbabile che causi qualsiasi problema perché il PCB è molto più grande della voce della tabella di processo.

Un enorme numero di zombi potrebbe, concepibilmente, influenzare la quantità di memoria che è gratuita per altri processi. Se hai tanti zombi, però, hai un problema serio con l'applicazione genitore o un bug del sistema operativo.

Come rimuovere i processi zombie

Non puoi uccidere un processo zombie perché è già morto. Non risponderà a nessun segnale perché è stato rimosso dalla memoria: non c'è nessun posto dove inviare a Sigkill. segnale. Puoi provare a inviare il Sigchld. Segnale al processo genitore, ma se non ha funzionato quando il processo figlio ha terminato, è improbabile che funzioni ora.

L'unica soluzione affidabile è quella di uccidere il processo genitore. Quando è terminato, i suoi processi figlio sono ereditati dal dentro Processo, che è il primo processo da eseguire in un sistema Linux (il suo ID processo è 1).

Il dentro Il processo esegue regolarmente la pulizia necessaria degli zombi, quindi per ucciderli, devi solo uccidere il processo che li ha creati. Il superiore Il comando è un modo conveniente per vedere se hai uno zombie.

Digita quanto segue:

  Top  

Questo sistema ha otto processi zombie. Noi può elencare questi. usando il. Ps. comando e lo conducono in egrep. . Ancora una volta, i processi di zombie hanno una bandiera dello stato di "Z" e di solito vedrai anche "defunct".

Digita quanto segue:

 PS AUX | egrep "z | defunct" 

I processi zombie sono elencati.

Questo è un modo neater per scoprire gli ID del processo degli zombi che scorrere avanti e indietro superiore . Vediamo anche che un'applicazione chiamata "BadpRG" ha generato questi zombi.

L'ID del processo del primo Zombie è 7641, ma dobbiamo trovare l'ID del processo del suo processo genitore. Possiamo farlo usando Ps. ancora. Utilizzeremo l'opzione di output ( -o ) dire Ps. Per visualizzare solo l'ID del processo del genitore, quindi passarlo con il PPID =. bandiera.

Il processo che vogliamo trovare sarà indicato usando il -P (Processo) opzione, quindi passando nell'ID del processo di Zombie.

Pertanto, digitiamo il seguente comando per cercare le informazioni di processo per il processo 7641, ma segnalerà solo l'ID del processo genitore:

 PS -O PPID = -P 7641 

Ci è stato detto che l'ID del processo genitore è 7636. Possiamo ora fare riferimento a cross-referent questo usando Ps. ancora una volta.

Vediamo questo corrisponde al nome del processo genitore da precedenti. Per uccidere il processo genitore, utilizzare l'opzione SIGKILL con il comando Kill come segue:

 Kill -sigkill 7636 

A seconda del proprietario del processo genitore, potrebbe anche essere necessario utilizzare sudo. .

Gli zombi non sono spaventosi ...

... A meno che non siano in una massiccia orda. Alcuni non sono nulla di cui preoccuparsi e un semplice riavvio li cancellerà.

Tuttavia, se si nota che un'applicazione o un processo è sempre a deviare gli zombi, è qualcosa che dovresti esaminare. È molto probabilmente solo un programma scritto con lo stesso, nel qual caso, forse c'è una versione aggiornata che pulisce correttamente dopo i suoi processi figlio.


Linux - Articoli più popolari

Come ottenere un Graphical Device Manager per Linux

Linux Mar 17, 2025

Africa Studio / Shutterstock.com Ci sono infiniti Utilità di riga di comando Linux che mostrano i dettagli dell'hardware del tuo computer . Hardinf..


Le 6 migliori distros Linux leggero

Linux Jul 27, 2025

3DMI / Shutterstock.com. Se il tuo computer Windows o Mac è vecchio e lottando per tenere il passo, l'installazione di Linux può dargli un nuovo locazione di..


Come ripristinare il Kernel in Linux

Linux Sep 30, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com Se il tuo PC Linux ha improvvisamente problemi dopo un aggiornamento al tuo sistema, è possibile a Kernel ..


Cosa c'è di nuovo in Linux Kernel 5.14

Linux Sep 9, 2025

Sean Locke Photography / Shutterstock Poiché Linux diventa 30 anni, il kernel 5.14 è stato rilasciato. Contiene la solita ampia offerta di correzioni interne..


Quali sono gli inconvenienti di passare a Linux?

Linux Oct 27, 2025

Larry Ewing e GIMP Gli evangelisti di Linux (come me) sono veloci per indicare i numerosi vantaggi di passare da Windows e MacOS. Ma nessun sistema operativo..


Ubuntu 21.10 arriva con un gnome 40 desktop personalizzato

Linux Oct 14, 2025

Ubuntu. Se sei un utente di Ubuntu, o qualcuno che sta pensando di provarlo, oggi è una buona giornata. Canonical ha ufficialmente rilasciato Ubuntu 21.10 con un desktop..


Cosa c'è di nuovo in Ubuntu 21.10 'Imphin Indri'

Linux Oct 14, 2025

Canonico Ubuntu 21.10 "Imph indri" era rilasciato il 14 ottobre 2021. Caratteristiche Gnome 40. , un nuovo kernel e applicazioni aggiornate..


Come gestire gli spazi nei nomi di file su Linux

Linux Dec 14, 2024

Come la maggior parte dei sistemi operativi, Linux supporta i nomi di file con spazi. Ma usare questi nomi di file sulla riga di comando non è sempre semplice. Ecco diversi modi in cui è poss..


Categorie