fix: Explicitly exit CLI to prevent hanging subprocesses #3083
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Reproduced using MCP config from: #1717
The easiest way to reproduce (and verify the fix) is to run
opencode run hi
.Investigation:
docker run
ai
library sends SIGTERM to all child MCP processes that use stdio transportsdocker run
client, andSIGTERM
isn't properly delivered, unlessdocker run --init
was used. So the subprocesses stick around, preventing opencode from exiting. I verified this with a minimalistic subprocess-spawning bun program andstrace
process.exit
, in which caseSIGTERM
is delivered correctlyprocess.exit()
when the CLI is done with everything.NOTE: Issue also happens in (some, maybe all) MCP servers wrapped by shell scripts, which this also fixes.
Closes #1717.
Maybe also #1810.
Maybe also #2406.