1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file.
4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef BASE_PROCESS_PROCESS_PROCESS_H_
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define BASE_PROCESS_PROCESS_PROCESS_H_
7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/base_export.h"
9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/basictypes.h"
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/process/process_handle.h"
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "build/build_config.h"
12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace base {
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass BASE_EXPORT Process {
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public:
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  Process() : process_(kNullProcessHandle) {
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  }
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  explicit Process(ProcessHandle handle) : process_(handle) {
21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  }
22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // A handle to the current process.
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  static Process Current();
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  static bool CanBackgroundProcesses();
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Get/Set the handle for this process. The handle will be 0 if the process
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // is no longer running.
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ProcessHandle handle() const { return process_; }
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void set_handle(ProcessHandle handle) {
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    process_ = handle;
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  }
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Get the PID for this process.
36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ProcessId pid() const;
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Is the this process the current process.
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool is_current() const;
40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Close the process handle. This will not terminate the process.
42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void Close();
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Terminates the process with extreme prejudice. The given result code will
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // be the exit code of the process. If the process has already exited, this
46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // will do nothing.
47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void Terminate(int result_code);
48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // A process is backgrounded when it's priority is lower than normal.
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Return true if this process is backgrounded, false otherwise.
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool IsProcessBackgrounded() const;
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Set a process as backgrounded. If value is true, the priority
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // of the process will be lowered. If value is false, the priority
55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // of the process will be made "normal" - equivalent to default
56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // process priority.
57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Returns true if the priority was changed, false otherwise.
58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool SetProcessBackgrounded(bool value);
59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Returns an integer representing the priority of a process. The meaning
61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // of this value is OS dependent.
62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  int GetPriority() const;
63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private:
65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ProcessHandle process_;
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}  // namespace base
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // BASE_PROCESS_PROCESS_PROCESS_H_
71