mirror of
https://github.com/arun11299/cpp-subprocess.git
synced 2025-08-05 04:46:21 -04:00

It's useful to be able to know the exit code of the process when it fails with a non-zero exit code. To get this to work, I had to fix a bug in the implementation of check_output. Previously, check_output would call both `p.communicate()` and `p.poll()`. The former has the effect of waiting for EOF on the input and then waiting for the child to exit, reaping it with `waitpid(2)`. Unfortunately, `p.poll()` was hoping to be able to also use `waitpid(2)` to retrieve the exit code of the process. But since the child had already been reaped, the given pid no longer existed, and thus `waitpid(2)` would return `ECHILD`. Luckily the call to `p.poll()` is unnecessary, as the process already provides `p.retcode()` for retrieving the exit code.