[BUG] Claude Desktop does not terminate MCP child processes on restart — zombie process accumulation (supplementary CPU evidence)

Resolved 💬 1 comment Opened Mar 20, 2026 by Vasiliy-b Closed Mar 20, 2026

This supplements #36616 with independently-gathered CPU impact data from a separate diagnostic session.

Real-time CPU profiling evidence

During a system thermal investigation (unrelated to MCP — user noticed Mac overheating), ps -arcwwwxo '%cpu %mem pid command' revealed Claude Desktop consuming ~88% CPU total with two sets of MCP servers running after a restart:

%CPU   PROCESS
56.1   Claude Helper (Renderer)   ← main renderer  
16.0   Claude Helper              ← utility process
10.5   Claude (main)              ← Electron main
 5.5   Claude Helper (misc)

System load average: 7.19 on 16-core M4 Max — nearly half the CPU cores under constant load from a desktop chat app.

Process tree audit

Full audit of Claude Desktop process tree showed 52 total processes, including:

  • 2× full sets of disclaimer MCP wrappers (old + new after restart)
  • 10 instances of serena (Trail of Bits skill, spawned by Cursor — separate but compounds the issue)
  • 12 instances of code-assist-mcp (Google Maps, spawned per Cursor window)

Key finding: restart doesn't kill old MCP servers

The disclaimer wrapper processes from the pre-restart session survived Cmd+Q → reopen. The new instance spawned a complete second set. Both sets had the same PGID as the main Electron process, confirming the disclaimer binary does NOT setsid() or setpgid() — it's a well-behaved child. The issue is that the Electron app doesn't terminate the first set before spawning the second during its initialization sequence.

Workaround confirmed working

pkill -f "Claude.*disclaimer"
# Then relaunch — single set of MCP servers, CPU drops to ~20-30%

Additional note on "invalid" label

This issue was auto-labeled "invalid" likely because it's a Claude Desktop bug filed in claude-code. There is no public anthropics/claude-desktop repository. If the Desktop team has a preferred reporting channel, please redirect — the technical evidence is solid and reproducible.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗