A zombie process cannot be killed—it has already exited. It remains in the process table because its parent has not collected its exit status with `wait()`.
1. Confirm it is a zombie and find its parent:
```bash
ps -o pid,ppid,state,cmd -p <PID>
```
State `Z` indicates a zombie.
2. Ask the parent to process child exits:
```bash
kill -SIGCHLD <PPID>
```
This only helps if the parent handles `SIGCHLD` correctly.
3. If appropriate, restart or terminate the parent:
```bash
kill -TERM <PPID>
# If it still will not exit:
kill -KILL <PPID>
```
When the parent exits, the zombie is normally adopted and reaped by PID 1 or another subreaper. Be cautious: killing the parent may disrupt a service or terminate other child processes.
If zombies recur, the actual fix is to correct or update the parent program so it calls `wait()`/`waitpid()` for exited children.
Also verify the state: a process in state `D` is not a zombie; it is blocked in uninterruptible I/O and often cannot be killed until the kernel operation completes.