On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution but still has an entry in the process table.
When a process finishes execution, it will have an exit status to report to its parent process. Because of this last little bit of information, the process will remain in the operating system’s process table as a zombie process, indicating that it is not to be scheduled for further execution, but that it cannot be completely removed (and its process ID cannot be reused) until it has been determined that the exit status is no longer needed.
When a child exits, the parent process will receive a SIGCHLD signal to indicate that one of its children has finished executing; the parent process will typically call the
wait()
system call at
this point. That call will provide the parent with the child’s exit status, and
will cause the child to be reaped,
or removed from the process table.It’s possible that the parent process is intentionally leaving the process in a zombie state to ensure that future children that it may create will not receive the same pid. Or perhaps the parent is occupied, and will reap the child process momentarily.
To remove zombies from a system, the SIGCHLD signal can be sent to the parent manually, using the
kill
command (“kill -s SIGCHLD
<ppid>
“).
If the parent process still refuses to reap the zombie, the next step would be
to remove the parent process. When a process loses its parent, init process
(pid 1) becomes its new parent. Init
periodically executes the wait
system call to
reap any zombies with init
as parent.To find zombie process: Use top or ps command
A zombie process is not the same as an orphan process. An orphan process is a process that is still executing, but whose parent has died. They do not become zombie processes; instead, they are adopted byinit
(process ID 1),
which wait
s on its children.Zombies can be identified in the output from the Unix
ps
command by the presence of a "Z
" in the
"STAT" column. Zombies that exist for more than a short period of
time typically indicate a bug in the parent program, or just an uncommon
decision to reap children (see example). If the parent program is no longer
running, zombie processes typically indicate a bug in the operating system. As
with other leaks, the presence of a few zombies is not worrisome
in itself, but may indicate a problem that would grow serious under heavier
loads. Since there is no memory allocated to zombie processes except for the
process table entry itself, the primary concern with many zombies is not
running out of memory, but rather running out of process ID numbers.
No comments:
Post a Comment