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_handle.h" 6 7 #include <sys/sysctl.h> 8 #include <sys/types.h> 9 #include <sys/user.h> 10 #include <unistd.h> 11 12 namespace base { 13 14 ProcessId GetParentProcessId(ProcessHandle process) { 15 struct kinfo_proc info; 16 size_t length; 17 int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process }; 18 19 if (sysctl(mib, arraysize(mib), &info, &length, NULL, 0) < 0) 20 return -1; 21 22 return info.ki_ppid; 23 } 24 25 FilePath GetProcessExecutablePath(ProcessHandle process) { 26 char pathname[PATH_MAX]; 27 size_t length; 28 int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, process }; 29 30 length = sizeof(pathname); 31 32 if (sysctl(mib, arraysize(mib), pathname, &length, NULL, 0) < 0 || 33 length == 0) { 34 return FilePath(); 35 } 36 37 return FilePath(std::string(pathname)); 38 } 39 40 } // namespace base 41