id summary reporter owner description type status milestone component version severity resolution keywords cc 13139 child::join() incorrectly throws `waitpid(2) failed: No child processes` if child exited abnormally keithb@… "Create a child process. Let it die abnormally (for example, calling `kill(getpid(), SIGABRT)` in the child). In the parent, call `child.join()`. It appears that the `::waitpid` loop in `boost::process::detail::posix::wait` at github.com/boostorg/process/blob/boost-1.64.0/include/boost/process/detail/posix/wait_for_exit.hpp#L26-L31 only checks that the child ended because of a call to `::exit()` and does not check for exiting via signal (`WIFSIGNALED()`). Because `WIFSIGNALED()` is true, `WIFEXITED()` is false; and because it's false, the loop will continue and call `::waitpid()` again... this time with a child PID to a process which has already been reaped. `waitpid()` will report an error (indicating that there's no such child prcess), and the error will be thrown. The child's exact reason for exiting is lost, which is why I believe this should be marked a ""Showstopper"" severity; a workaround would be to avoid calling `boost::process::wait()` in any fashion and to instead use a custom waitpid loop using the `child.native_handle()`." Bugs new To Be Determined process Boost 1.64.0 Problem