1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/process/process_handle.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <stddef.h>
8*6777b538SAndroid Build Coastguard Worker #include <sys/sysctl.h>
9*6777b538SAndroid Build Coastguard Worker #include <sys/types.h>
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/logging.h"
13*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_IOS)
16*6777b538SAndroid Build Coastguard Worker #include "base/ios/sim_header_shims.h"
17*6777b538SAndroid Build Coastguard Worker #else
18*6777b538SAndroid Build Coastguard Worker #include <libproc.h>
19*6777b538SAndroid Build Coastguard Worker #endif
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker namespace base {
22*6777b538SAndroid Build Coastguard Worker
GetParentProcessId(ProcessHandle process)23*6777b538SAndroid Build Coastguard Worker ProcessId GetParentProcessId(ProcessHandle process) {
24*6777b538SAndroid Build Coastguard Worker struct kinfo_proc info;
25*6777b538SAndroid Build Coastguard Worker size_t length = sizeof(struct kinfo_proc);
26*6777b538SAndroid Build Coastguard Worker int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
27*6777b538SAndroid Build Coastguard Worker if (sysctl(mib, 4, &info, &length, NULL, 0) < 0) {
28*6777b538SAndroid Build Coastguard Worker DPLOG(ERROR) << "sysctl";
29*6777b538SAndroid Build Coastguard Worker return -1;
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker if (length == 0)
32*6777b538SAndroid Build Coastguard Worker return -1;
33*6777b538SAndroid Build Coastguard Worker return info.kp_eproc.e_ppid;
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker
GetProcessExecutablePath(ProcessHandle process)36*6777b538SAndroid Build Coastguard Worker FilePath GetProcessExecutablePath(ProcessHandle process) {
37*6777b538SAndroid Build Coastguard Worker char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
38*6777b538SAndroid Build Coastguard Worker if (!proc_pidpath(process, pathbuf, sizeof(pathbuf)))
39*6777b538SAndroid Build Coastguard Worker return FilePath();
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Worker return FilePath(pathbuf);
42*6777b538SAndroid Build Coastguard Worker }
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker } // namespace base
45