From 44c0fc2820bb13018b200d3ec990c30cdd2a08cd Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 25 Nov 2015 12:48:15 +0200 Subject: Add process::try_wait() for non-blocking wait --- butl/process.cxx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'butl/process.cxx') diff --git a/butl/process.cxx b/butl/process.cxx index 66a831e..bd13392 100644 --- a/butl/process.cxx +++ b/butl/process.cxx @@ -121,6 +121,26 @@ namespace butl return WIFEXITED (status) && WEXITSTATUS (status) == 0; } + bool process:: + try_wait (bool& s) + { + if (id != 0) + { + int r (waitpid (id, &status, WNOHANG)); + + if (r == 0) // Not exited yet. + return false; + + id = 0; // We have tried. + + if (r == -1) + throw process_error (errno, false); + } + + s = WIFEXITED (status) && WEXITSTATUS (status) == 0; + return true; + } + #else // _WIN32 static void -- cgit v1.1