| // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_COMMON_PROCESS_WATCHER_H_ |
| #define CHROME_COMMON_PROCESS_WATCHER_H_ |
| |
| #include "build/build_config.h" |
| |
| #include "base/basictypes.h" |
| #include "base/process_util.h" |
| |
| class ProcessWatcher { |
| public: |
| // This method ensures that the specified process eventually terminates, and |
| // then it closes the given process handle. |
| // |
| // It assumes that the process has already been signalled to exit, and it |
| // begins by waiting a small amount of time for it to exit. If the process |
| // does not appear to have exited, then this function starts to become |
| // aggressive about ensuring that the process terminates. |
| // |
| // On Linux this method does not block the calling thread. |
| // On OS X this method may block for up to 2 seconds. |
| // |
| // NOTE: The process handle must have been opened with the PROCESS_TERMINATE |
| // and SYNCHRONIZE permissions. |
| // |
| static void EnsureProcessTerminated(base::ProcessHandle process_handle); |
| |
| #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| // The nicer version of EnsureProcessTerminated() that is patient and will |
| // wait for |process_handle| to finish and then reap it. |
| static void EnsureProcessGetsReaped(base::ProcessHandle process_handle); |
| #endif |
| |
| private: |
| // Do not instantiate this class. |
| ProcessWatcher(); |
| |
| DISALLOW_COPY_AND_ASSIGN(ProcessWatcher); |
| }; |
| |
| #endif // CHROME_COMMON_PROCESS_WATCHER_H_ |