# util: Use job objects to reap spawned process trees on Windows \(\#58885\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/c642b422deaf6119aad2943ea22ec3074f39ef3c)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: c642b422deaf6119aad2943ea22ec3074f39ef3c

Requested commit: c642b422deaf6119aad2943ea22ec3074f39ef3c

Commit: c642b422deaf6119aad2943ea22ec3074f39ef3c

Tree: 1396120c51efa1e6eb4d46f3285aa544c9045959

Author: Miguel Raz Guzmán Macedo

Committer: GitHub

## Message

```
util: Use job objects to reap spawned process trees on Windows (#58885)

On Windows, `util::process::Child::kill()` only terminated the direct
child process, and nothing tied the lifetime of spawned process trees to
Zed. External agent servers launched through ACP (e.g. `claude-code-acp`
via `npx`) spawn node workers and MCP servers as grandchildren, which
were orphaned on every session teardown and accumulated indefinitely —
hundreds of idle `node.exe` processes and GBs of RAM over days.

This PR assigns spawned processes to a Win32 job object configured with
`JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`:

- `kill()` now calls `TerminateJobObject`, killing the entire tree
instead of just the (shell wrapper) child.
- Dropping `Child` closes the job handle, which makes the OS reap the
tree — including when Zed exits for any reason (even crashes), since the
OS closes its handles.
- Unix behavior (process groups via `killpg`) is unchanged.

Added two Windows tests that spawn a real `powershell -> ping` process
tree and assert the grandchild is terminated on `kill()` and on drop.
Both fail without the fix and pass with it. Verified with `cargo test -p
util`, `script/clippy -p util`, and `cargo check -p agent_servers -p
dap` on Windows 11.

Closes #58873

Release Notes:

- Fixed external agent servers and debug adapters leaking helper
processes (e.g. node workers and MCP servers) on Windows.

---------

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
```

## Parents

- [d8eb569cc5a823506142af3c09a1d65bb7279279](https://git.cafe/gitcafe/zed/commit/d8eb569cc5a823506142af3c09a1d65bb7279279?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/c642b422deaf6119aad2943ea22ec3074f39ef3c?format=markdown)
