diff options
Diffstat (limited to 'base')
-rw-r--r-- | base/process_util.h | 3 | ||||
-rw-r--r-- | base/process_util_win.cc | 25 |
2 files changed, 17 insertions, 11 deletions
diff --git a/base/process_util.h b/base/process_util.h index ae38c5a..f00016e 100644 --- a/base/process_util.h +++ b/base/process_util.h @@ -139,6 +139,9 @@ bool KillProcesses(const std::wstring& executable_name, int exit_code, // for the process to be actually terminated before returning. // Returns true if this is successful, false otherwise. bool KillProcess(int process_id, int exit_code, bool wait); +#if defined(OS_WIN) +bool KillProcess(HANDLE process, int exit_code, bool wait); +#endif // Get the termination status (exit code) of the process and return true if the // status indicates the process crashed. It is an error to call this if the diff --git a/base/process_util_win.cc b/base/process_util_win.cc index a69f5d5..f1fd72c 100644 --- a/base/process_util_win.cc +++ b/base/process_util_win.cc @@ -153,21 +153,24 @@ bool LaunchApp(const CommandLine& cl, // entry structure, giving it the specified exit code. // Returns true if this is successful, false otherwise. bool KillProcess(int process_id, int exit_code, bool wait) { - bool result = false; HANDLE process = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, // Don't inherit handle process_id); - if (process) { - result = !!TerminateProcess(process, exit_code); - if (result && wait) { - // The process may not end immediately due to pending I/O - if (WAIT_OBJECT_0 != WaitForSingleObject(process, 60 * 1000)) - DLOG(ERROR) << "Error waiting for process exit: " << GetLastError(); - } else { - DLOG(ERROR) << "Unable to terminate process: " << GetLastError(); - } - CloseHandle(process); + if (process) + return KillProcess(process, exit_code, wait); + return false; +} + +bool KillProcess(HANDLE process, int exit_code, bool wait) { + bool result = !!TerminateProcess(process, exit_code); + if (result && wait) { + // The process may not end immediately due to pending I/O + if (WAIT_OBJECT_0 != WaitForSingleObject(process, 60 * 1000)) + DLOG(ERROR) << "Error waiting for process exit: " << GetLastError(); + } else { + DLOG(ERROR) << "Unable to terminate process: " << GetLastError(); } + CloseHandle(process); return result; } |