[BUG] Claude Desktop Windows leaves orphaned renderer processes after quit, preventing restart

Resolved 💬 11 comments Opened Dec 26, 2025 by stephaneberle9 Closed Mar 6, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Environment

  • Platform: Claude Desktop (Windows native application)
  • Claude Desktop version: 1.0.2339 (1782e2)
  • Build date: 2025-12-16T19:35:52.000Z
  • Operating System: Windows 11 [adjust if different]
  • Architecture: x64

Bug Description

Claude Desktop on Windows fails to properly terminate child processes when quitting the application. After quit, the parent process terminates but 6+ child "Claude" renderer processes remain running as orphans. This prevents the application from restarting - subsequent launch attempts result in immediate silent shutdown without any error message.

What Should Happen?

Expected Behavior

  • All Claude processes (parent + child renderer processes) should terminate cleanly on quit
  • Application should restart successfully without manual intervention
  • Standard Electron app lifecycle cleanup should handle all child processes

Error Messages/Logs

No error messages are displayed. But in the Windows task manager the following situation can be observed:

## Actual Behavior

- Parent Claude process (main, ~333 MB) terminates successfully
- 6+ child renderer processes remain as orphans with varying memory footprints:
  - Process 1: 181.5 MB
  - Process 2: 67.9 MB  
  - Process 3: 52.5 MB
  - Process 4: 16.4 MB
  - Process 5: 10.3 MB
  - Process 6: 4.6 MB
- All orphaned processes show:
  - 0% CPU usage
  - 0 MB/s Disk I/O
  - 0 MBit/s Network
  - Status: Running (but inactive)
- Restart fails silently until orphaned processes are manually killed
- No error logs or user-facing error messages

Steps to Reproduce

  1. Launch Claude Desktop normally
  2. Use the application (normal conversation, any features)
  3. Quit Claude Desktop via File menu → Quit, OR
  4. Open Task Manager (Ctrl+Shift+Esc)
  5. Observe: Multiple "Claude" processes still running (6+ instances) despite main window closed
  6. Attempt to restart Claude Desktop
  7. Application launches briefly then immediately shuts down without error message

Claude Model

Sonnet (default)

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Claude 1.0.2339 (1782e2) 2025-12-16T19:35:52.000Z

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Windows Terminal

Additional Information

Workaround

Manual process termination required before each restart:

PowerShell:

Get-Process -Name "Claude" | Stop-Process -Force

Command Prompt:

taskkill /F /IM Claude.exe

Task Manager:

  1. Select all Claude processes individually
  2. End Task for each process
  3. Only then can Claude Desktop restart successfully

Analysis

This appears to be an Electron app lifecycle bug where:

  1. The quit handler successfully terminates the main/parent process
  2. Child renderer processes (one per window/webview) are not properly signaled to terminate
  3. Process cleanup hooks are either missing or failing for renderer processes
  4. No mutex/lock file prevents launching when orphaned processes exist

Related Issues

  • Similar to #14951 (Claude Desktop macOS requires quitting twice - zombie state issue)
  • Related to #8865 (Windows background process cleanup, but for Claude Code CLI)
  • Pattern suggests cross-platform Electron cleanup problem affecting both macOS and Windows

Impact

Severity: High - Breaks normal application lifecycle

User Impact:

  • Users must manually kill processes via Task Manager after every quit
  • No clear indication to users why restart fails
  • Significant friction in normal usage workflow
  • Accumulating orphaned processes can consume system memory over time

Suggested Fix

Electron app should implement proper process cleanup:

  1. Register quit event handlers for all child processes
  2. Implement app.quit() with proper app.on('will-quit') cleanup
  3. Force terminate orphaned renderers if graceful shutdown fails
  4. Add process mutex to prevent launch when existing processes detected
  5. Provide user feedback if launch blocked by existing processes

Additional Context

  • Issue occurs consistently after every quit, regardless of usage patterns
  • No MCP servers or extensions were active during testing
  • Clean Windows installation with no known conflicts
  • Workaround confirms issue is purely process cleanup related

View original on GitHub ↗

This issue has 11 comments on GitHub. Read the full discussion on GitHub ↗