Hvad er en zombieproces:
Det er en proces, der sluttede, men ikke det hele fjernes straks fra hukommelsen, da dens procesbeskrivelse forbliver i hukommelsen.
Hvad skal være den normale opførsel af en proces:
Når en proces slutter, bliver processens status
EXIT_ZOMBIE
og processens forælder underrettes om, at dens underordnede proces er død med
SIGCHLD
signal.
Den overordnede proces skal derefter køre
wait()
for at systemopkaldet kan læse den døde proces' afslutningsstatus og andre oplysninger. Efter
wait()
kaldes, fjernes zombieprocessen fra hukommelsen. Dette sker hurtigt, så du ikke ser zombieprocesser akkumulere på dit system. Men i tilfælde, hvor vi ser flere zombieprocesser akkumulere, er dette en situation, hvor programkoden ikke er effektiv.
Sådan finder du en zombie processer:
Kørsel af kommandoen
top
Kørsel af kommandoen
ps -ef | grep defunct
Sådan afsluttes akkumulerende zombieprocesser:
Det meste af tiden har zombieprocesserne det samme overordnede proces-id.
Der er to metoder til at fjerne processen:
- Send
SIGCHLD
signal til den overordnede proces.
Dette signal fortæller den overordnede proces at køre wait()
System kalder og rydder op i sine zombiebørn:
kill -s SIGCHLD <PPID>
Eksempel:
kill -s SIGCHLD 2201
- Dræb zombieforældreprocessen
kill -9 <PPID>
Eksempel:
kill -9 2201