fix(provider): terminate job before closing terminal to prevent orphaned processes #168
+49
−3
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.

Summary
When Neovim exits, the
opencode --portprocess stays orphaned in memory instead of being terminated.Root Cause
During
VimLeavePre, snacks.terminal has already cleaned up its internal state, which invalidates the Neovim job. This means:jobstop(job_id)returnstruebut doesn't actually terminate the processjobpid(job_id)returnsnil- Neovim no longer knows which PID the job maps toSolution
Capture the PID (not just job ID) when the terminal opens, and use shell
killto terminate it directly duringVimLeavePre. This bypasses Neovim's job tracking entirely.Changes
_pidat toggle/start time usingjobpid(terminal_job_id)vim.fn.system('kill -TERM ' .. pid)instop()for reliable terminationVimLeavetoVimLeavePrefor earlier cleanupTesting
:Opencode:qa)ps aux | grep "opencode --port"should return nothing