Dovrei uccidere il processo di zombi nel mio sistema?


20

Dato che sono un principiante nei sistemi Linux / Unix e ho appena letto dei processi di zombi , ho una domanda. Ne ho 10 in questo momento. Devo ucciderli e se sì, perché? Sono un carico sul mio sistema?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
Non c'è bisogno di ucciderli. Sono già morti.
Marco

2
Quindi non caricano più il mio sistema. E rimarranno così fino a quando non riavvio il sistema o li uccido, giusto?
Jason Paddle,

7
@Marco: non puoi uccidere ciò che è già morto. Ma puoi uccidere i suoi genitori, harrharr!
Wullxz,

7
Il problema è che i loro genitori non li hanno raccolti (quando sono morti).
ypercubeᵀᴹ

3
10 zombi ??? Sei infestato! Corri Jason corri.
Luc M,

Risposte:


29

Non puoi uccidere uno zombi, è già morto.

Le risorse di tale processo sono gratuite e disponibili per altri processi. Ciò che rimane è una voce nella tabella dei processi. Ciò non influisce sulle prestazioni, non ti preoccupare.


Sì, questo ha senso. Posso uccidere il processo genitore. Grazie per l'info. Volevo solo sapere se caricano o nessun sistema.
Jason Paddle,

Credo che ci sia un limite di zombi però. Penso che sia il 1024, quindi non danneggerà le prestazioni ma penso che ci sia un limite al numero che puoi avere.
Professionista

@ProfessionalAmateur Cosa succede se raggiungi il limite di zombi (1024 o altro)?
Roddy of the Frozen Peas,

@RoddyoftheFrozenPeas - Ad essere sincero, non sono sicuro, li ho sempre ripuliti prima di arrivare a quel punto. Immagino che il sistema proverà a creare un altro zombi e forse avrà una violazione della memoria o qualche altro errore grave, overflow o errore di segmentazione di qualche tipo.
Professionista

2
@ProfessionalAmateur: non c'è limite di zombi in Linux. I PID di zombi sono soggetti /proc/sys/kernel/pid_max, proprio come ogni altro PID.
visto il

16

Quali sono questi processi di zombi che compaiono in ps? Li uccido ma non vanno via!

Gli zombi sono processi morti. Non puoi uccidere i morti. Tutti i processi alla fine muoiono e quando lo fanno diventano zombi. Non consumano quasi risorse, cosa che ci si aspetta perché sono morti! Il motivo degli zombi è che il genitore (processo) dello zombi può recuperare lo stato di uscita dello zombi e le statistiche sull'utilizzo delle risorse. Il genitore segnala al sistema operativo che non ha più bisogno dello zombi usando una delle chiamate di sistema wait ().

Quando un processo muore, i suoi processi figlio diventano tutti figli del processo numero 1, che è il processo init. Init aspetta sempre che i bambini muoiano, in modo che non rimangano zombi.

Se hai processi di zombi significa che quegli zombi non sono stati attesi dai loro genitori (guarda PPID visualizzato da ps -l). Hai tre opzioni: Correggi il processo genitore (fallo attendere); uccidere il genitore; o vivere con esso. Ricorda che vivere con esso non è così difficile perché gli zombi occupano poco più di una riga in più nell'output di ps.

Fonte: http://www.linuxsa.org.au/tips/zombies.html

E nel caso in cui si stia uccidendo, questo thread superutente potrebbe essere interessante per te: come trovi il processo genitore di un processo zombi?


Nota che riparare il genitore potrebbe essere eccessivo - forse non è ancora arrivato al punto di aspettare che siano ancora figli. Forse lo farà più tardi (o sì, forse non lo farà).
Romain,

sì hai ragione. La risposta alla domanda che ho collegato ti dice come determinare il processo genitore. Quindi hai sempre la possibilità di verificare quali processi creano gli zombi e decidere se è necessario per mantenerlo in esecuzione.
Wullxz,

7

Non è necessario ucciderli.

Per acquisire alcune conoscenze di base:

Ogni processo è figlio di un processo genitore (ad eccezione del processo init, ma non dobbiamo preoccuparci di questo).

Quando un processo figlio termina l'esecuzione, potrebbe ancora contenere dati a cui il processo padre desidera accedere, in genere un codice di uscita che descrive il risultato del processo figlio (Operazione riuscita? Errore? Qual è stato il codice errore?).

Un processo figlio finito si aggira nella tabella dei processi come processo zombi fino a quando il processo genitore "si" ripristina "o attende il processo figlio, che è semplicemente il processo genitore che dice al sistema operativo che non ha più bisogno di quel processo figlio; Ha letto tutti i valori restituiti che desidera e ha finito. A questo punto, il sistema pulirà la voce nella tabella dei processi.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.