xref: /aosp_15_r20/external/cronet/base/process/process_handle_linux.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 "base/files/file_util.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/numerics/safe_conversions.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/process/internal_linux.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
11*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_AIX)
12*6777b538SAndroid Build Coastguard Worker #include "base/process/internal_aix.h"
13*6777b538SAndroid Build Coastguard Worker #endif
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker 
GetParentProcessId(ProcessHandle process)17*6777b538SAndroid Build Coastguard Worker ProcessId GetParentProcessId(ProcessHandle process) {
18*6777b538SAndroid Build Coastguard Worker   ProcessId pid =
19*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_AIX)
20*6777b538SAndroid Build Coastguard Worker       internalAIX::ReadProcStatsAndGetFieldAsInt64(process,
21*6777b538SAndroid Build Coastguard Worker                                                    internalAIX::VM_PPID);
22*6777b538SAndroid Build Coastguard Worker #else
23*6777b538SAndroid Build Coastguard Worker       checked_cast<ProcessId>(internal::ReadProcStatsAndGetFieldAsInt64(
24*6777b538SAndroid Build Coastguard Worker           process, internal::VM_PPID));
25*6777b538SAndroid Build Coastguard Worker #endif
26*6777b538SAndroid Build Coastguard Worker   // TODO(zijiehe): Returns 0 if |process| does not have a parent process.
27*6777b538SAndroid Build Coastguard Worker   if (pid)
28*6777b538SAndroid Build Coastguard Worker     return pid;
29*6777b538SAndroid Build Coastguard Worker   return -1;
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker 
GetProcessExecutablePath(ProcessHandle process)32*6777b538SAndroid Build Coastguard Worker FilePath GetProcessExecutablePath(ProcessHandle process) {
33*6777b538SAndroid Build Coastguard Worker   FilePath stat_file = internal::GetProcPidDir(process).Append("exe");
34*6777b538SAndroid Build Coastguard Worker   FilePath exe_name;
35*6777b538SAndroid Build Coastguard Worker   if (!ReadSymbolicLink(stat_file, &exe_name)) {
36*6777b538SAndroid Build Coastguard Worker     // No such process.  Happens frequently in e.g. TerminateAllChromeProcesses
37*6777b538SAndroid Build Coastguard Worker     return FilePath();
38*6777b538SAndroid Build Coastguard Worker   }
39*6777b538SAndroid Build Coastguard Worker   return exe_name;
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker }  // namespace base
43