17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/process/process_handle.h"
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/files/file_util.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/process/internal_linux.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace base {
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochProcessId GetParentProcessId(ProcessHandle process) {
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ProcessId pid =
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      internal::ReadProcStatsAndGetFieldAsInt64(process, internal::VM_PPID);
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (pid)
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return pid;
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return -1;
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochFilePath GetProcessExecutablePath(ProcessHandle process) {
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilePath stat_file = internal::GetProcPidDir(process).Append("exe");
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilePath exe_name;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!ReadSymbolicLink(stat_file, &exe_name)) {
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // No such process.  Happens frequently in e.g. TerminateAllChromeProcesses
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return FilePath();
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return exe_name;
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace base
31