1 // Copyright (c) 2013 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 #ifndef BASE_PROCESS_PROCESS_HANDLE_H_ 6 #define BASE_PROCESS_PROCESS_HANDLE_H_ 7 8 #include <stdint.h> 9 #include <sys/types.h> 10 11 #include "base/base_export.h" 12 #include "base/files/file_path.h" 13 #include "build/build_config.h" 14 15 #if defined(OS_WIN) 16 #include <windows.h> 17 #endif 18 19 namespace base { 20 21 // ProcessHandle is a platform specific type which represents the underlying OS 22 // handle to a process. 23 // ProcessId is a number which identifies the process in the OS. 24 #if defined(OS_WIN) 25 typedef HANDLE ProcessHandle; 26 typedef DWORD ProcessId; 27 typedef HANDLE UserTokenHandle; 28 const ProcessHandle kNullProcessHandle = NULL; 29 const ProcessId kNullProcessId = 0; 30 #elif defined(OS_POSIX) 31 // On POSIX, our ProcessHandle will just be the PID. 32 typedef pid_t ProcessHandle; 33 typedef pid_t ProcessId; 34 const ProcessHandle kNullProcessHandle = 0; 35 const ProcessId kNullProcessId = 0; 36 #endif // defined(OS_WIN) 37 38 // Returns the id of the current process. 39 // Note that on some platforms, this is not guaranteed to be unique across 40 // processes (use GetUniqueIdForProcess if uniqueness is required). 41 BASE_EXPORT ProcessId GetCurrentProcId(); 42 43 // Returns a unique ID for the current process. The ID will be unique across all 44 // currently running processes within the chrome session, but IDs of terminated 45 // processes may be reused. This returns an opaque value that is different from 46 // a process's PID. 47 BASE_EXPORT uint32_t GetUniqueIdForProcess(); 48 49 #if defined(OS_LINUX) 50 // When a process is started in a different PID namespace from the browser 51 // process, this function must be called with the process's PID in the browser's 52 // PID namespace in order to initialize its unique ID. Not thread safe. 53 // WARNING: To avoid inconsistent results from GetUniqueIdForProcess, this 54 // should only be called very early after process startup - ideally as soon 55 // after process creation as possible. 56 BASE_EXPORT void InitUniqueIdForProcessInPidNamespace( 57 ProcessId pid_outside_of_namespace); 58 #endif 59 60 // Returns the ProcessHandle of the current process. 61 BASE_EXPORT ProcessHandle GetCurrentProcessHandle(); 62 63 // Returns the process ID for the specified process. This is functionally the 64 // same as Windows' GetProcessId(), but works on versions of Windows before Win 65 // XP SP1 as well. 66 // DEPRECATED. New code should be using Process::Pid() instead. 67 // Note that on some platforms, this is not guaranteed to be unique across 68 // processes. 69 BASE_EXPORT ProcessId GetProcId(ProcessHandle process); 70 71 // Returns the ID for the parent of the given process. 72 BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process); 73 74 #if defined(OS_POSIX) 75 // Returns the path to the executable of the given process. 76 BASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process); 77 #endif 78 79 } // namespace base 80 81 #endif // BASE_PROCESS_PROCESS_HANDLE_H_ 82