How to kill All Zombie Processes Running on the Server?
Posted on May 14th, 2019
A process in its terminated state is called a zombie process. A zombie process is also known as a defunct process.
Did you ever notice some processes with status “Z” on your server while you are checking the server monitoring?. These are Zombie processes. Which means that the parent is still alive. If the parent process is exited, then the child would be orphaned and re-parented to init, which would immediately perform the wait on the process on the server.
List the Zombie processes running on the server
We can list these processes in different ways. Some of the commands are listed below to view the zombie process. Please see the commands with examples.
1) Login to the server as root user.
2) Run the below command to see the zombie process.
# ps aux |grep “defunct”
3) The output will be as follows.
# ps aux |grep “defunct”
manu 3366 0.0 0.0 0 0 ? Z 07:34 0:00 [chromium-browse] defunct
manu 3435 0.0 0.0 0 0 ? Z 07:44 0:19 [chromium-browse] defunct
manu 3722 0.0 0.0 0 0 ? Z 08:21 0:00 [pidgin] defunct
manu 4287 0.1 0.0 0 0 ? Z 09:26 0:38 [chromium-browse] defunct
manu 5378 0.1 0.0 0 0 ? Z 11:24 0:15 [chromium-browse] defunct
# ps aux |grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
manu 3366 0.0 0.0 0 0 ? Z 07:34 0:00 [chromium-browse]
manu 3435 0.0 0.0 0 0 ? Z 07:44 0:19 [chromium-browse]
manu 3722 0.0 0.0 0 0 ? Z 08:21 0:00 [pidgin]
manu 4287 0.1 0.0 0 0 ? Z 09:26 0:38 [chromium-browse]
manu 5378 0.1 0.0 0 0 ? Z 11:24 0:15 [chromium-browse]
To know how many Zombie processes running on the server?
To get a count of all the Zombie processes on the server. This can be done in different ways.
Please see the commands to run to fetch out the number of Zombie processes.
# ps aux | awk {‘print $8’}|grep -c Z
7
or
# ps aux | awk ‘{ print $8 ” ” $2 }’ | grep -wc Z
7
or
# ps aux | awk {‘print $8’}|grep Z|wc -l
7
After this, we need to list the process ID or PID of the Zombies. To list the PID of the Zombies that are running on the server at the moment, run the below command from the terminal as the root user.
# ps aux | awk ‘{ print $8 ” ” $2 }’ | grep -w Z
Now you will get an output as follows.
Z 3366
Z 3435
Z 3722
Z 4287
Z 5378
In order to kill these zombie processes, you need to find out the parent process ID first.
To find the parent processes run the below command.
# pstree -paul
Now you will get an output as given below.
[root@vps ~]# pstree -paul
init,1
|-crond,542
|-dovecot,6576
| |-anvil,6577,dovecot
| |-config,25099
| `-log,6578
|-httpd,5047
| |-httpd,1900,apache
| |-httpd,9428,apache
| | |-php-cgi,1904,ctalk
| | |-php-cgi,11989,ctalk
| | `-php-cgi,11994,ctalk
| |-httpd,19203,apache
| |-httpd,22975,apache
| |-httpd,25197,apache
| `-httpd,30417,apache
|-(kthreadd/3929,2)
| `-(khelper/3929,3)
|-master,5227
…..…
From this, we can easily find out the PID of the parent of the zombie process. The next thing is to kill them or need to restart the services.
To kill the processes, run following the command
[root@server]# kill -9 PID
If you need any further help, please do reach our support department.