Exactly what is a “zombie process” on linux?

To understand a spook process is and just what causes zombie ways to appear, it’s important to understand a little about how exactly processes focus on Linux.

Whenever a process dies on Linux, it’s not all taken off memory immediately — its process descriptor stays in memory (the procedure descriptor takes only a small quantity of memory). The process’s status becomes EXIT_ZOMBIE and also the process’s parent is notified that it is child process has died using the SIGCHLD signal. Parents process will be designed to execute waiting for() system call to see the dead process’s exit status along with other information. This enables parents tactic to get information in the dead process. After wait() is known as, the zombie process is totally taken off memory.

This normally happens very rapidly, which means you won’t see zombie processes accumulating in your system. However, if your parent process isn’t programmed correctly rather than calls wait(), its zombie children will hang in there in memory until they’re cleared up.

Utilities like GNOME System Monitor, the top command, and also the ps command display zombie processes.


Risks of Zombie Processes

Zombie processes don’t consume any system sources. (Really, each one of these utilizes a very small quantity of system memory to keep its process descriptor.) However, each zombie process maintains its process ID (PID). Linux systems possess a finite quantity of process IDs – 32767 automatically on 32-bit systems. If zombies are accumulating in a extremely swift rate – for instance, if incorrectly programmed server software programs are creating zombie processes under load — the whole pool of accessible PIDs will ultimately become allotted to zombie processes, stopping other processes from launching.

However, a couple of zombie processes hanging out aren’t any problem – even though they do indicate an insect using their parent process in your system.


Eliminating Zombie Processes

You cannot kill zombie processes as possible kill normal processes using the SIGKILL signal — zombie processes happen to be dead. Keep in mind that its not necessary to eliminate zombie processes unless of course you’ve got a great amount in your system – a couple of zombies are harmless. However, there’s a couple of methods for you to eliminate zombie processes.

One of the ways is as simple as delivering the SIGCHLD signal towards the parent process. This signal informs parents tactic to execute waiting for() system call and cleanup its zombie children. Send the signal using the kill command, replacing pid within the command below using the parent process’s PID:

kill -s SIGCHLD pid

However, when the parent process isn’t programmed correctly and it is ignoring SIGCHLD signals, this won’t help. You’ll need to kill or close the zombies’ parent process. Once the procedure that produced the zombies ends, init inherits the zombie processes and becomes their new parent. (init may be the first process began on Linux at boot and it is assigned PID 1.) init periodically executes waiting for() system call to wash up its zombie children, so init can make short work from the zombies. You are able to restart parents process after closing it.

If your parent process is constantly on the create zombies, it ought to be fixed in order that it correctly calls wait() to reap its zombie children. File an insect report if your program in your system keeps creating zombies.

Resourse: https://howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/