UI freezes completely when Bash tool blocks on named pipes (FIFO) - unrecoverable without external kill
Resolved 💬 3 comments Opened Dec 25, 2025 by samurax Closed Dec 29, 2025
Description
Claude Code UI becomes completely unresponsive when a Bash command blocks on reading from a named pipe (FIFO). The UI freezes entirely - no scrolling, no cancel button works, nothing responds until the blocking process is manually killed from another terminal.
Environment
- Claude Code version: 2.0.76
- OS: Linux 6.8.0-59-generic (Ubuntu)
- Shell: Bash
Steps to Reproduce
- Create a named pipe:
mkfifo /tmp/test_pipe - In Claude Code, ask it to read from the pipe: "read /tmp/test_pipe" or "show me what's in /tmp/test_pipe"
- Claude executes
cat /tmp/test_pipeor similar - Result: Entire UI freezes indefinitely
Expected Behavior
- Bash commands should have a reasonable default timeout
- UI should remain responsive during command execution
- Cancel/interrupt functionality should work
- Or at minimum: warning when attempting to read from FIFO devices
Actual Behavior
- UI completely freezes (no scrolling, no input, no cancel)
- Only way to recover is to
killthe blocking process from another terminal - Child bash process becomes zombie - parent Claude never reaps it
- The FIFO file descriptor stays open on the Claude process
Verified Technical Details
Frozen session still running:
samurax 5872 6.6 1.7 74849296 507376 ? Sl 11:09 2:05 claude
FIFO still held open by frozen Claude:
claude 5872 samurax 25r FIFO 259,2 0t0 18481334 /inkode/ports/PESA
Child bash is zombie (never reaped):
samurax 7602 0.0 0.0 0 0 ? Zs 11:13 0:00 [bash] <defunct>
Process tree showing zombie child:
claude(5872)-+-bash(7602) # <-- zombie
|-{claude}(5901)
|-{claude}(5902)
...
Workaround
Use explicit timeouts when reading from pipes:
timeout 1 cat /path/to/pipe
Impact
- High - Complete loss of session control
- Cannot save work or gracefully exit
- Requires external intervention to recover
- Zombie processes accumulate
- First observed on 2.0.76 (Dec 25, 2024)
Suggestions
- Run Bash commands with a configurable default timeout
- Keep UI event loop separate from command execution
- Add non-blocking I/O or polling for command output
- Detect FIFO/device special files before reading
- Ensure proper child process reaping (wait/waitpid)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗