refactor(process): extend preexec_fn→start_new_session swap to remaining Popen sites

PR #8399 replaced preexec_fn=os.setsid with start_new_session=<bool> in
tools/environments/local.py to use CPython's thread-safe POSIX fastpath
instead of a between-fork-and-exec callback. Apply the same swap to the
other three files covered by tests/tools/test_windows_compat.py so all
Popen call sites use a consistent idiom.

Also:
- Strip a trailing-whitespace line introduced by the original PR.
- Update CONTRIBUTING.md + website/docs/developer-guide/contributing.md
  to recommend start_new_session in the cross-platform process management
  section.
- Fix a stale docstring reference in tools/environments/base.py (_popen_bash).
- Extend test_windows_compat.py with a parallel regression guard that
  rejects bare start_new_session=True (must be gated on _IS_WINDOWS).

Scope note: this is code hygiene, not a fix for #8340 — the two forms
invoke the same setsid() syscall, so this swap alone does not change
behavior for the 'setsid ... & disown' hang scenario in that issue.
#8340 remains open.
This commit is contained in:
Teknium 2026-04-19 05:46:01 -07:00
parent 94a1990404
commit c74030a11d
No known key found for this signature in database
8 changed files with 31 additions and 13 deletions

View file

@ -129,8 +129,7 @@ except UnicodeDecodeError:
```python
import platform
if platform.system() != "Windows":
kwargs["preexec_fn"] = os.setsid
kwargs["start_new_session"] = platform.system() != "Windows"
```
### 4. Path separators