1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/process/process.h"
6
7#include <sys/resource.h>
8#include <sys/time.h>
9#include <sys/types.h>
10
11#include "base/logging.h"
12#include "base/process/kill.h"
13
14namespace base {
15
16// static
17Process Process::Current() {
18  return Process(GetCurrentProcessHandle());
19}
20
21ProcessId Process::pid() const {
22  if (process_ == 0)
23    return 0;
24
25  return GetProcId(process_);
26}
27
28bool Process::is_current() const {
29  return process_ == GetCurrentProcessHandle();
30}
31
32void Process::Close() {
33  process_ = 0;
34  // if the process wasn't terminated (so we waited) or the state
35  // wasn't already collected w/ a wait from process_utils, we're gonna
36  // end up w/ a zombie when it does finally exit.
37}
38
39void Process::Terminate(int result_code) {
40  // result_code isn't supportable.
41  if (!process_)
42    return;
43  // We don't wait here. It's the responsibility of other code to reap the
44  // child.
45  KillProcess(process_, result_code, false);
46}
47
48#if !defined(OS_LINUX)
49bool Process::IsProcessBackgrounded() const {
50  // See SetProcessBackgrounded().
51  return false;
52}
53
54bool Process::SetProcessBackgrounded(bool value) {
55  // POSIX only allows lowering the priority of a process, so if we
56  // were to lower it we wouldn't be able to raise it back to its initial
57  // priority.
58  return false;
59}
60
61// static
62bool Process::CanBackgroundProcesses() {
63  return false;
64}
65
66#endif
67
68int Process::GetPriority() const {
69  DCHECK(process_);
70  return getpriority(PRIO_PROCESS, process_);
71}
72
73}  // namspace base
74