MODELDRIFT.WATCH

Question 13 · Sep 26 · Day 17

Gemini on Question 13, Sep 26

How do I kill a zombie process in Linux that won't respond to SIGTERM?

The reason a zombie process won't respond to SIGTERM (or even SIGKILL / kill -9) is that it is already dead.

A zombie process (status Z in top or ps) has finished executing, but it still has an entry in the process table. It is simply waiting for its parent process to read its exit status. Because it is no longer an active program, it cannot receive or process signals.

To get rid of a zombie process, you must target its parent process. Here is the step-by-step way to do it:

Step 1: Find the Parent Process ID (PPID)

You need to find out which process spawned the zombie. Run the following command, replacing <ZOMBIE_PID> with the ID of your zombie process:

ps -o ppid= -p <ZOMBIE_PID>

This will output a single number, which is the Parent Process ID (PPID).

If you want more context about what the parent process actually is, you can run:

ps -ef | grep <ZOMBIE_PID>

Step 2: Nudge the Parent Process (Safe Method)

Sometimes, the parent process is just hanging and needs a reminder to check on its children. You can send a SIGCHLD signal to the parent. This tells the parent, "One of your children has died, please collect its exit status."

kill -s SIGCHLD <PPID>

Check if the zombie is gone. If the parent is poorly programmed or completely frozen, this won't work, and you must move to Step 3.

Step 3: Kill the Parent Process (Aggressive Method)

If the parent refuses to reap the zombie, you must kill the parent process.

When a parent process dies, all of its child processes (including zombies) are adopted by the init system (usually systemd, which is PID 1). The init system is designed to immediately clean up and remove any zombie processes it inherits.

kill -9 <PPID>

⚠️ Warning: Before you do this, check what the parent process is (ps -p <PPID>). If the parent is a crucial system service or your main database process, killing it will stop that service.


Are you sure it's a Zombie? (The "D" State trap)

People often confuse a Zombie (State Z) with a process in Uninterruptible Sleep (State D).

You can check the state by running:

ps -o stat= -p <PID>
  • •If the output is Z, it is a zombie. Follow the steps above.
  • •If the output is D, it is not a zombie. It is a process stuck waiting on hardware I/O (like a failing hard drive or a disconnected network share). You cannot kill a D state process, not even by killing its parent. It will only go away if the hardware responds, or if you reboot the machine.

sha256 c3beee41633e… · 18 tokens in · 1,816 out · 15.5 s · via Google · stopped on its own

Sep 26, the whole dayQuestion 13, every day

Exact recordShowHideThe model id, the run, the verbatim text with line numbers and its full sha256
Model
google/gemini-3.1-pro-preview
pinned google/gemini-3.1-pro-preview-20260219; alias resolved to google/gemini-3.1-pro-preview-20260219 at 2026-09-26 09:00:06 UTC (matches the pin)
Date
2026-09-26 · run 20260926T090007Z-89c0b7 · scorer v1
Scored
answered
sha256
c3beee41633e791ebea98aa6a922ac389932967cd70a56e4ff311fb81a1dbcc0
Permalink
https://modeldrift.watch/r/2026-09-26/R1/google/gemini-3.1-pro-preview/
Scored
answered
Received
2026-09-26 09:05:24 UTC
Run
20260926T090007Z-89c0b7
Served by
Google · HTTP 200 · finish stop
Size
2,598 characters · 1,816 tokens out incl. hidden reasoning · 15.5 s
The reason a zombie process won't respond to `SIGTERM` (or even `SIGKILL` / `kill -9`) is that **it is already dead.**
A zombie process (status `Z` in `top` or `ps`) has finished executing, but it still has an entry in the process table. It is simply waiting for its **parent process** to read its exit status. Because it is no longer an active program, it cannot receive or process signals.
To get rid of a zombie process, you must target its **parent process**. Here is the step-by-step way to do it:
### Step 1: Find the Parent Process ID (PPID)
You need to find out which process spawned the zombie. Run the following command, replacing `<ZOMBIE_PID>` with the ID of your zombie process:
```bash
ps -o ppid= -p <ZOMBIE_PID>
```
*This will output a single number, which is the Parent Process ID (PPID).*
If you want more context about what the parent process actually is, you can run:
```bash
ps -ef | grep <ZOMBIE_PID>
```
### Step 2: Nudge the Parent Process (Safe Method)
Sometimes, the parent process is just hanging and needs a reminder to check on its children. You can send a `SIGCHLD` signal to the parent. This tells the parent, "One of your children has died, please collect its exit status."
```bash
kill -s SIGCHLD <PPID>
```
Check if the zombie is gone. If the parent is poorly programmed or completely frozen, this won't work, and you must move to Step 3.
### Step 3: Kill the Parent Process (Aggressive Method)
If the parent refuses to reap the zombie, you must kill the parent process.
When a parent process dies, all of its child processes (including zombies) are adopted by the `init` system (usually `systemd`, which is PID 1). The `init` system is designed to immediately clean up and remove any zombie processes it inherits.
```bash
kill -9 <PPID>
```
**⚠️ Warning:** Before you do this, check what the parent process is (`ps -p <PPID>`). If the parent is a crucial system service or your main database process, killing it will stop that service.
---
### Are you sure it's a Zombie? (The "D" State trap)
People often confuse a **Zombie** (State `Z`) with a process in **Uninterruptible Sleep** (State `D`).
You can check the state by running:
```bash
ps -o stat= -p <PID>
```
* If the output is **`Z`**, it is a zombie. Follow the steps above.
* If the output is **`D`**, it is **not** a zombie. It is a process stuck waiting on hardware I/O (like a failing hard drive or a disconnected network share). **You cannot kill a `D` state process, not even by killing its parent.** It will only go away if the hardware responds, or if you reboot the machine.

End of response · 49 lines · 2,598 characters · sha256 c3beee41633e791ebea98aa6a922ac389932967cd70a56e4ff311fb81a1dbcc0