What is the best way to kill Zombie processes and D state process by single command.
5 Answers
Double tap.
Actually, reboot. There's no real way to easily get rid of a zombie, but there's really no reason to because a zombie isn't taking up resources on the computer; it's an orphaned entry in a process table. Init is supposed to collect it but something went wrong with the process. http://en.wikipedia.org/wiki/Zombie_process
Perhaps you're asking because there's worse problem...are you getting a boatload of zombies roaming your process table? That usually means a bug in the program or a problem with a configuration. You shouldn't have a huge number of zombies on the system. One or two I don't worry. If you have fifty of them from Apache or some other daemon, you probably have a problem. But that's not directly related to your question...
- 31,092
- 9
- 65
- 87
/sbin/reboot
You can't kill a zombie - its already dead
If the ppid still exists, then terminating that can often clean up the spawned zombies.
You shouldn't be killing processes in uninterruptible sleep - usually this means they're i/o bound, but IIRC it can also occur during a blocking read from e.g. a network socket.
Errors in underlying filesystem or disks might cause I/O bound processes. In this case try to "umount -f" the filesystem they depend upon - this will abort whatever outstanding I/O requests there are open.
- 598
- 1
- 5
- 12
-
2
-
8You lose data anyway by reboot. This way you might avoid reboot - useful feature on production or development systems. – Arie Skliarouk Apr 07 '14 at 15:07
-
2Thanks, this worked for an issue we had with a script stuck attempting to access a disappeared NFS mount for weeks :) – BT643 Nov 19 '14 at 16:33
-
1This is exactly what is happening to me sometimes when I do the `ls` command on a s3fs mount. The `ls` process won't kill even with `kill -9` until I force the unmount with `umount -l`. Alternatives to umount? – Marco Marsala Oct 02 '15 at 15:11
-
-
2
Next line will kill all zombies
ps -xal | grep defunct | awk '{ system (" kill -9 " $4 ) }'
- 6,357
- 7
- 21
- 32
- 11
- 1
Most answers focus on Zombies, this targets D state
Processes that are stuck in "uninterruptible sleep" show up in a process list as being in state D
In my experience, these are frequently blocked on I/O in some way. If you've been reading files from a mounted network disk and the remote host has restarted or network connectivity has failed in some way, then the copy process can be stuck waiting indefinitely.
The only fixes are to just kill the process, or to umount -f /mnt/source
to unmount the disk, and then the process will see that it has gone, and will fail cleanly. Obviously the I/O action will be incomplete too, likely with a partial file copy.
Related, tar
and rsync
process can be in this state while running through SSH - they are literally blocked waiting for the network to catch up. Point is that state D is not necessarily bad, so killing them all may not be an ideal solution.
- 2,219
- 13
- 25