Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top
System information as of Fri Mar  9 19:40:01 KST 2012

  System load:    0.59               Processes:           167
  Usage of /home: 23.0% of 11.00GB   Users logged in:     1
  Swap usage:     0%                 IP address for eth1:

  => There is 1 zombie process.

  Graph this data and manage this system at

10 packages can be updated.
4 updates are security updates.

Last login: Fri Mar  9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
usera     13572  0.0  0.0   7628   992 pts/2    S+   19:40   0:00 grep --color=auto Z

How to find that zombie process?

share|improve this question
why dont you open the system monitor and search for the zombie process? – Rrj Jul 6 '12 at 8:00
How to do that on a headless no-X server? – SabreWolfy Feb 27 '13 at 10:01
up vote 53 down vote accepted

To kill a zombie (process) you have to kill its parent process (just like real zombies!), but the question was how to find it.

Find the zombie (The question answered this part):

a@SERVER:~$ ps aux | grep 'Z'

What you get is Zombies and anything else with a Z in it, so you will also get the grep:

usera      13572   0.0  0.0   7628   992 pts/2    S+   19:40   0:00 grep --color=auto Z
usera      93572   0.0  0.0   0      0   ??       Z    19:40   0:00 something

Find the zombie's parent:

a@SERVER:~$ pstree -p -s 93572

Will give you:


In this case you do not want to kill that parent process and you should be quite happy with one zombie, but killing the immediate parent process 5145 should get rid of it.

Additional resources on askubuntu:

share|improve this answer
The result you show in your answer is the the grep command itself, not the zombie process. It is the same mis-interpratation as Pablo made in his answer. The answer by Rinzwind below does actually look for the zombie process and list them. Another option could be to grep for "defunct" – FvD Jul 23 '13 at 23:24
pstree -H your_desired_pid -p – Greg Krsak Apr 9 '14 at 16:45
Thanks Greg for adding to the discussion, but please remember this is a help site, just pasting a command without explaining anything is not helpful to most people coming here looking for help. – Duncanmoo Apr 11 '14 at 7:13
This is a great answer! It is still valid today! I was able to find my zombie process and kill its parent process without any problems. Thank you! – Terrance Oct 29 '15 at 5:30
if you do not have pstree installed, ps wauxf does the same thing – JDS Mar 18 at 14:10

Even though this question is old I thought everyone deserved a more reliable answer:

ps axo pid=,stat=

This will emit two whitespace-delimited columns, the first of which is a PID and the second of which is its state.

I don't think even GNU ps provides a way to filter by state directly, but you can reliably do this with awk

ps axo pid=,stat= | awk '$2~/^Z/ { print }'

You now a list of PIDs which are zombies. Since you know the state it's no longer necessary to display it, so that can be filtered out.

ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'

Giving a newline-delimited list of zombie PIDs.

You can now operate on this list with a simple shell loop

for pid in $(ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }') ; do
    echo "$pid" # do something interesting here

ps is a powerful tool and you don't need to do anything complicated to get process information out of it.

share|improve this answer
awk is also a powerful tool which doesn't just split text but can also match it. +1 ... the others used grep where it's unnecessary and imprecise. – 0xC0000022L May 26 '14 at 12:28
so now that i have list of zombie processes. how do i kill them? – chovy Dec 21 '15 at 4:58
@chovy: It will depend, but generally involves killing or signalling the parent. Other answers here go in to that. From within the loop shown above you can find the parent pid like this: ps -p "$pid" -opid=,ppid= – Sorpigal Dec 22 '15 at 14:50
if i will the parent won't it kill all its child processes? I just want to kill the one zombie process. I know the ppid. – chovy Dec 23 '15 at 1:32
@chovy: The command you want is kill -CHLD "$ppid" but even this may not be enough, read this entire post to understand what your options are. – Sorpigal Dec 30 '15 at 18:49

ps aux | awk '{ print $8 " " $2 }' | grep -w Z


From the comments an improved one:

for p in $(ps jauxww | grep Z | grep -v PID | awk '{print $3}'); do
    for every in $(ps auxw | grep $p | grep cron | awk '{print $2}'); do
        kill -9 $every;

Careful though: this one also kills the proces.

share|improve this answer
still returns nothing. I think my way also wasn't wrong. – Pablo Mar 9 '12 at 10:51

I suggest you this command:

ps aux | awk '"[Zz]" ~ $8 { printf("%s, PID = %d\n", $8, $2); }'
share|improve this answer

To list process zombies, try this command:

ps j | awk '$7 ~ "Z"'

This also will return the list of their parent process ids (PPID).

To try to kill the zombies, try:

kill -9 $(ps j | awk 'NR>1 && $7 ~ "Z" {print $2}')

To identify their parents, try with pstree, like:

$ ps j | awk 'NR>1 && $7 ~ "T" {print $2}' | xargs -L1 pstree -sg
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.