A zombie process (also called defunct) is a program that already finished, but a tiny entry is still stuck in the system’s process list. This happens mostly on Linux/macOS when a “child” program ends and its “parent” hasn’t picked up the “I’m done” message yet. Zombies don’t use CPU and barely any memory—they just take a slot until they’re cleaned up.
One or two zombies aren’t a problem. If you see lots of them, it usually means an app is a bit buggy, and in extreme cases it can clutter the system so new processes are harder to manage.
Parent starts child: an app launches a helper program.
Child finishes: it exits and leaves an exit status behind.
Waiting to be “reaped”: the parent is supposed to collect that status.
Zombie state: until the parent collects it, the finished child shows as defunct (Z).
Auto-clean: if the parent app closes, the system usually cleans up the zombie.
In top/ps you see processes marked Z or defunct.
Many zombies all tied to the same app.
An app that spawns helpers (converters, renderers, plugins) keeps “leaking” zombies.
Just a few? Ignore them—they’ll often clear on their own.
Many from one app? Close and reopen that app, or restart the computer.
Happens often? Update the app and your OS; report the bug to the app’s support.
Find the parent with ps -o ppid= -p <zombie_pid> and restart that parent process.
Developers: handle SIGCHLD and call wait()/waitpid() so children are reaped correctly.