xref: /aosp_15_r20/external/cronet/base/process/process_handle_mac.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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