**App version:** ChatGPT 26.730.61639 (embedded Codex Framework 151.0.7922.71)
**OS:** macOS 14 (Darwin 23.2.0), Apple Silicon
**Description**
The ChatGPT desktop app continuously accumulates `` (zombie) child processes without reaping them. The parent is the main `ChatGPT` process, and the leak traces to the embedded Codex `app-server` / `code-mode-host` chain (`codex app-server` → `node_repl` / `codex-code-mode-host`).
**Leak rate:** ~36 zombies/minute. The single ChatGPT process becomes the PPID of hundreds of `` children that are never reaped.
**Impact**
On macOS the per-user process limit (`kern.maxprocperuid`) is 2666. At this leak rate the app exhausts the process table in roughly an hour, after which the whole system can no longer fork new processes — every shell and app throws `fork failed: resource temporarily unavailable` until ChatGPT is quit. Quitting ChatGPT lets launchd immediately reap all zombies, confirming the app is the sole cause.
**Likely root cause**
Child processes are `fork()`ed but the parent never calls `wait()`/`waitpid()` to reap them.
**Steps to reproduce**
1. Launch the ChatGPT desktop app and leave it running (idle is enough; the code-mode/agent host spawns subprocesses).
2. Periodically run: `ps -eo ppid,stat | awk ‘$2==<ChatGPT_PID> && $3 ~ /Z/’ | wc -l`
3. Observe the zombie count climb steadily and never drop.
**Live evidence (captured on my machine)**
```
ps -p (pgrep -x ChatGPT) -o pid,etime,command
PID ELAPSED COMMAND
59492 19:55 /Applications/ChatGPT.app/Contents/MacOS/ChatGPT
# zombie children of the ChatGPT process, two samples 20s apart:
18:09:02 → 706 zombies
18:09:22 → 718 zombies (+12 in 20 s)
```
After only ~20 minutes of uptime the single ChatGPT process already owned 718 `` children, still climbing at a steady ~36/min. Left running it reaches the 2666 per-user cap and takes the whole system down with `fork failed`.
**Expected:** child processes are reaped; zombie count stays near zero.
**Actual:** zombies grow unbounded until the OS per-user process limit is hit.