Add pollWithRusage to Subprocess
[folly.git] / folly / Subprocess.cpp
index b8070c071c32f55fd3df78bf69d0b10f4037b6cd..b2d9cca0d21c05385298052f45fb6f56dd2e3494 100644 (file)
@@ -22,8 +22,6 @@
 
 #if __linux__
 #include <sys/prctl.h>
-#include <sys/syscall.h>
-#include <unistd.h>
 #endif
 #include <fcntl.h>
 
@@ -45,6 +43,7 @@
 #include <folly/io/Cursor.h>
 #include <folly/portability/Sockets.h>
 #include <folly/portability/Stdlib.h>
+#include <folly/portability/SysSyscall.h>
 #include <folly/portability/Unistd.h>
 
 constexpr int kExecFailure = 127;
@@ -546,11 +545,11 @@ void Subprocess::readChildErrorPipe(int pfd, const char* executable) {
   throw SubprocessSpawnError(executable, info.errCode, info.errnoValue);
 }
 
-ProcessReturnCode Subprocess::poll() {
+ProcessReturnCode Subprocess::poll(struct rusage* ru) {
   returnCode_.enforce(ProcessReturnCode::RUNNING);
   DCHECK_GT(pid_, 0);
   int status;
-  pid_t found = ::waitpid(pid_, &status, WNOHANG);
+  pid_t found = ::wait4(pid_, &status, WNOHANG, ru);
   // The spec guarantees that EINTR does not occur with WNOHANG, so the only
   // two remaining errors are ECHILD (other code reaped the child?), or
   // EINVAL (cosmic rays?), both of which merit an abort: