Zombied processes can indicate a software problem. So when a process goes full-on zombie, you need to know what to do.
Wait. Wrong type of zombies.
More like it.
Every so often a Linux process goes astray and does nothing—not even gobble up CPU cycles. Although zombies don't use precious resources (like a running and rogue app might), it can pose a threat. How? When a process is zombied, it retains its Process ID (PID). Since Linux systems have a finite number of PIDs (although that number is pretty high), should enough PIDs be zombied, no other process could launch.
SEE: Disaster recovery and business continuity plan (Tech Pro Research)
Chances of that happening are very unlikely. However, more importantly, zombied processes indicate something has gone wrong with an application, and there might be a bug in a particular program. Bugs on data center software should not be tolerated and need to be addressed. Until the flaw is addressed, you might want to check for and kill zombie processes.
So when a process goes full-on zombie, what do you do? You find and kill those zombie processes. Let me show you how.
Finding a zombie
The first thing to do is to find the zombie process. Fortunately, this is really easy, thanks to the ps command. Pipe the output of the ps command through grep to list out any process whose STAT is Z (for zombie). Open a terminal window and issue the following command:
ps aux | grep 'Z'
The output of the above command will list out any process that includes Z in the output (Figure A).
As you can see, there are a number of running processes that have a Zombie status. This command will also list any process that includes the letter Z in the output, so you need to ignore anything without a Z in the STAT column.
Killing a zombie
Instead of decapitating, burning, or completely dismembering the zombie, we want to use the kill command to end those zombies. The output of the first command will include the PID of all zombied processes, so to kill one of those, you issue the command:
Where PID is the process ID of the process in question. So if you want to kill the zombied thunderbird process (with PID 20589), the command is:
And that's it.
You could get crafty and cobble together a bash script to take care of this automatically, however, you run the risk of killing a necessary process. Because of that risk, I always recommend taking care of this task manually. This is especially true, considering we're working with a production-level, data center server (although I demonstrated on a desktop machine).
If you find services and apps crashing on you, you should check for zombied processes and get rid of them. Once you know which processes are being zombied, file a bug report or contact the developer and let them know (especially if this becomes a regular occurrence for an application).
- Hyperconverged infrastructure: A cheat sheet (TechRepublic)
- 10 things companies are keeping in their own data centers (TechRepublic download)
- How to change the default SSH port on your data center Linux servers (TechRepublic)
- How to monitor events on your Linux data center servers with auditd (TechRepublic)
- How to monitor your data center Linux server with osquery (TechRepublic)
- What's next for data centers? Think micro data centers (ZDNet)
- The data center is dead: Here's what comes next (ZDNet)
- Best cloud services for small businesses (CNET)
- DevOps: More must-read coverage (TechRepublic on Flipboard)