Am 09.11.2017 um 16:34 schrieb Dietmar Maurer:

It should be possible to make this work without starting any additional
thread, and when this gets integrated into vibe.d, that should
definitely be the goal.

How would you do the final "wait" without using a thread?

Basically on Windows, the process handle can be used in the
..WaitFor..Object family of functions, which is the base of the event
loop (MsgWaitForMultipleObjectsEx). On Posix systems, SIGCHLD can be
used to determine when a child process has exited (together with calling
waitpid to determine the actual PID and exit code).