Friday, December 01, 2006

Zombie Process

A process can be sleeping in kernel code. Usually that's because of faulty hardware or a badly written driver- or maybe a little of both. A device that isn't set to the interrupt the driver thinks it is can cause this, for example- the driver is waiting for something its never going to get. The process doesn't ignore your signal- it just never gets it.
A zombie process doesn't react to signals because it's not really a process at all- it's just what's left over after it died. What's supposed to happen is that its parent process was to issue a "wait()" to collect the information about its exit. If the parent doesn't (programming error or just bad programming), you get a zombie. The zombie will go away if its parent dies- it will be "adopted" by init which will do the wait()- so if you see one hanging about, check its parent; if it is init, it will be gone soon, if not the only recourse is to kill the parent..which you may or may not want to do.
* Finally, a process that is being traced (by a debugger, for example) won't react to the KILL either.

We can find out zombie process by :-
Use top or ps command:
# top
OR
# ps aux | awk '{ print $8 " " $2 }' | grep -w Z


How do I kill zombie process?
You cannot kill zombies, as they are already dead. But if you have too many zombies then kill parent process or restart service.

You can kill zombie process using PID obtained from any one of the above command. For example kill zombie proces having PID 4104:
# kill -9 4104
*Please note that kill -9 does not guarantee to kill a zombie process

How do I automate zombie process killing?
Write a script and schedule as a cron job.
for each in `ps jauxww | grep Z | grep -v PID | awk ‘{print $3}’`; do for every in `ps auxw | grep $each | grep cron | awk ‘{print $2}’`; do kill -9 $every; done; done

4 comments:

Anonymous said...

Nice Collection!

www.vinodthakur.blogspot.com

Charanjit Cheema said...

Hi Prabhat
Thanks for this blog. It help me to know about the zombie process.

مُصْعَب إِبْرَاهِيم said...

here is a most effective way to find a zombie process :
first run :

ps -el | grep Z

this will give you the zombie process data including its Parent Process ID (PPID), which we need to take care of.
then you have three options as stated by David Newall in this article You have three choices: Fix the parent process (make it wait); kill the parent; or live with it

if you chose to kill the parent process then you should use this

kill -9 PPID
where PPID is the Parent Process ID you got from the previous command.

i will be posting this on my website as soon as i get home.

Anonymous said...

Nice job. Didn't even change the PS ID's. Bloddy scrapers.

source: cyberciti.biz: Killing zombie process

SHOW ENGINE INNODB STATUS

  The SHOW ENGINE INNODB STATUS command in MySQL provides detailed information about the internal state of the InnoDB storage engine. This ...