Skip to content
This repository was archived by the owner on Feb 14, 2026. It is now read-only.
This repository was archived by the owner on Feb 14, 2026. It is now read-only.

Orphaned Claude processes accumulate ~285 MB each on --resume #164

@faramarz

Description

@faramarz

Summary

When Happy resumes a Claude Code session via --resume, the original "parent" Claude process detaches (PPID becomes 1) but never terminates. Each orphan retains its own set of MCP server child processes. This leads to significant memory accumulation over time.

Environment

  • happy-coder: 0.13.0
  • Claude Code: 2.1.34 (native binary)
  • macOS 15.3 (M2 Max, 32GB RAM)
  • MCP config: 4 servers (filesystem, fetch, playwright, pplgraph)

Reproduction

  1. Start a Happy session from mobile (creates Claude process A + MCP children)
  2. Session gets resumed via --resume <session-id> (creates Claude process B + new MCP children)
  3. Process A detaches (PPID → 1) but stays alive with its MCP children

Observed Behavior

After 2 mobile sessions with resumes, I found 3 orphaned Claude processes:

PID 75342 (PPID 1) — 215 MB + 4 MCP children (63 MB) = 278 MB
PID 80924 (PPID 1) — 223 MB + 4 MCP children (63 MB) = 286 MB  
PID 84777 (PPID 1) — 224 MB + 2 MCP children (49 MB) = 273 MB

Total waste: 858 MB across 3 orphans + 10 MCP server processes, all idle.

Active sessions (the resumed ones) were working correctly — only the pre-resume parents were orphaned.

Process Tree

Session start:
  happy-coder → claude_remote_launcher → claude (A) ← spawns MCP servers
                                           ↓
Session resume:
  happy-coder → claude_remote_launcher → claude (B) ← spawns NEW MCP servers
                                         claude (A) ← detaches to PPID 1, keeps MCP servers alive

Expected Behavior

When a session is resumed, the original Claude process and its MCP children should be terminated. The new resumed process takes over the session — the old one serves no purpose.

Workaround

Manually kill the orphans:

# Find orphaned claude processes (PPID 1, no active session)
ps -eo pid,ppid,rss,command | grep "claude/versions" | awk '$2==1'

# Kill them (cascades to MCP children)
kill <pid1> <pid2> ...

Impact

Each orphan costs ~285 MB (claude binary + MCP servers). With active mobile use creating multiple resumes per day, this can waste 1+ GB of RAM. On a 32GB machine this is manageable, but on 16GB machines it would create significant memory pressure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions