Very interested. At work I've created a robust wrapper API over Process. It functions well except for subprocesses that are truly interactive, which I define as a process that requires a TTY.
Can the authors comment on the possibility of adding a control/configuration semantic for handling processes that require a TTY?
I realize that the review period is over, but I just hit a limitation of Foundation.Process Windows that also exists in Subprocess and which I’d like to share for consideration:
When launching a process that itself might launch subprocesses, it is possible to terminate the entire process tree on Posix platforms using send(signal: .kill, toProcessGroup: true). However, there is no way to terminate an entire process tree on Windows. As far as I could tell, supporting this would require the process to be associated to a job object with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE during process creation (Destroying all child processes (and grandchildren) when the parent exits - The Old New Thing) – as a disclaimer, I have not tried had the chance to verify this approach myself.
For context why I hit this: SourceKit-LSP launches subprocesses to perform background indexing. When it shuts down, it should ensure that it doesn’t leave any orphan processes behind, and defaults to killing/terminating (on Posix vs Windows resp.) unresponsive subprocesses. But processes like swift-build might have spawned their own children, which would not be affected by their parent’s termination, leaving them running parentless.
Update: I've decided to accept the latest update as 0.1. I've posted an announcement at a separate post to not distract ourselves from API discussion here.