diff options
Diffstat (limited to 'base/process_util_posix.cc')
-rw-r--r-- | base/process_util_posix.cc | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index 562b8e9..87abbb8 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -140,13 +140,24 @@ void RaiseProcessToHighPriority() { // setpriority() or sched_getscheduler, but these all require extra rights. } -bool DidProcessCrash(ProcessHandle handle) { +bool DidProcessCrash(bool* child_exited, ProcessHandle handle) { int status; - if (waitpid(handle, &status, WNOHANG)) { - // I feel like dancing! + const int result = waitpid(handle, &status, WNOHANG); + if (result == -1) { + LOG(ERROR) << "waitpid failed with errno:" << errno; + if (child_exited) + *child_exited = false; + return false; + } else if (result == 0) { + // the child hasn't exited yet. + if (child_exited) + *child_exited = false; return false; } + if (child_exited) + *child_exited = true; + if (WIFSIGNALED(status)) { switch(WTERMSIG(status)) { case SIGSEGV: |