Skip to content

Process termination monitoring implementation on Linux conflicts with processes spawned by other means #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jakepetroules opened this issue Jun 15, 2025 · 0 comments · May be fixed by #83
Labels
bug Something isn't working

Comments

@jakepetroules
Copy link
Contributor

The approach used by Subprocess to monitor subprocess termination on Linux is fundamentally flawed as it calls waitid with P_ALL, and WEXITED without WNOWAIT, which will end up reaping pids that were spawned outside the Subprocess library.

We need to use an implementation more like https://github.com/swiftlang/swift-testing/blob/main/Sources/Testing/ExitTests/WaitFor.swift, which doesn't suffer from this issue.

@jakepetroules jakepetroules added the bug Something isn't working label Jun 15, 2025
jakepetroules added a commit that referenced this issue Jun 15, 2025
… processes spawned by other means

The approach used by Subprocess to monitor subprocess termination on Linux is fundamentally flawed as it calls waitid with P_ALL, and WEXITED without WNOWAIT, which will end up reaping pids that were spawned outside the Subprocess library.

Use an implementation more like swift-testing does for wait tests, which doesn't suffer from this issue.

Closes #82
jakepetroules added a commit that referenced this issue Jun 15, 2025
… processes spawned by other means

The approach used by Subprocess to monitor subprocess termination on Linux is fundamentally flawed as it calls waitid with P_ALL, and WEXITED without WNOWAIT, which will end up reaping pids that were spawned outside the Subprocess library.

Use an implementation more like swift-testing does for wait tests, which doesn't suffer from this issue.

Closes #82
jakepetroules added a commit that referenced this issue Jun 17, 2025
Process termination monitoring is started asynchronously with the closure which receives the Execution, meaning any use of Execution in the body to send signals, etc., may send them to a pid which no longer refers to the original process. The cleanup handler may also run after the process has already terminated. This compounds with the fix for #82 (#83) to fully resolve the race conditions.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
1 participant