UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MacPlatformProcess.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================================
4 MacPlatformProcess.h: Mac platform Process functions
5==============================================================================================*/
6
7#pragma once
8
11#include <sys/sysctl.h>
12
15{
16 FProcState(const FProcState&) = delete;
17 FProcState& operator=(const FProcState&) = delete;
18
21
24
27 {
28 return ProcessId;
29 }
30
36 bool IsRunning();
37
46
51 void Wait();
52
53protected: // the below is not a public API!
54
57
59 bool bIsRunning = true;
60
62 bool bHasBeenWaitedFor = false;
63
66};
67
69struct FProcHandle
70{
73
80
81 constexpr FProcHandle()
82 : ProcInfo(nullptr), OpenedPid(-1)
83 {
84 }
85
90
95
98 {
100 }
101
103 inline void Reset()
104 {
105 ProcInfo = nullptr;
106 OpenedPid = -1;
107 }
108
111 {
112 return ProcInfo != nullptr || OpenedPid != -1;
113 }
114
115 // the below is not part of FProcHandle API and is specific to Unix implementation
117 {
118 return ProcInfo;
119 }
120};
121
126{
127 struct FProcEnumInfo;
128
133 {
134 public:
135 // Constructor
139
140 // Destructor
142
143 // Gets current process enumerator info.
144 FProcEnumInfo GetCurrent() const;
145
151 bool MoveNext();
152
153 private:
154 // Array of process info structures.
155 struct kinfo_proc* Processes;
156
157 // Count of processes.
158 uint32 ProcCount;
159
160 // Current process index.
161 uint32 CurrentProcIndex;
162 };
163
168 {
170
171 // Gets process PID.
172 uint32 GetPID() const;
173
174 // Gets parent process PID.
175 uint32 GetParentPID() const;
176
177 // Gets process name. I.e. exec name.
178 FString GetName() const;
179
180 // Gets process full image path. I.e. full path of the exec file.
181 FString GetFullPath() const;
182
183 private:
184 // Private constructor.
186
187 // Process info struct.
188 struct kinfo_proc ProcInfo;
189 };
190
191 static void* GetDllHandle( const TCHAR* Filename );
192 static void FreeDllHandle( void* DllHandle );
193 static void* GetDllExport( void* DllHandle, const TCHAR* ProcName );
196 static const TCHAR* BaseDir();
197 static const TCHAR* ComputerName();
198 static const TCHAR* UserName(bool bOnlyAlphaNumeric = true);
200 static FString GetCurrentWorkingDirectory();
201 static const TCHAR* ExecutablePath();
202 static const TCHAR* ExecutableName(bool bRemoveExtension = true);
203 static FString GenerateApplicationPath( const FString& AppName, EBuildConfiguration BuildConfiguration);
204 static const TCHAR* GetModuleExtension();
205 static const TCHAR* GetBinariesSubdirectory();
206 static const FString GetModulesDirectory();
207 static bool CanLaunchURL(const TCHAR* URL);
208 static void LaunchURL(const TCHAR* URL, const TCHAR* Parms, FString* Error);
209 static FString GetGameBundleId();
210 static FProcHandle CreateProc(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeWriteChild, void* PipeReadChild = nullptr);
211 static FProcHandle CreateProc(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeWriteChild, void* PipeReadChild, void* PipeStdErrChild);
214 static bool IsProcRunning( FProcHandle & ProcessHandle );
215 static void WaitForProc( FProcHandle & ProcessHandle );
216 static void CloseProc( FProcHandle & ProcessHandle );
217 static void TerminateProc( FProcHandle & ProcessHandle, bool KillTree = false );
218 static bool GetProcReturnCode( FProcHandle & ProcHandle, int32* ReturnCode );
219 static bool IsApplicationRunning( const TCHAR* ProcName );
220 static bool IsApplicationRunning( uint32 ProcessId );
221 static FString GetApplicationName( uint32 ProcessId );
222 static bool IsSandboxedApplication();
223 static bool LaunchFileInDefaultExternalApplication( const TCHAR* FileName, const TCHAR* Parms = NULL, ELaunchVerb::Type Verb = ELaunchVerb::Open, bool bPromptToOpenOnFailure = true);
224 static void ExploreFolder( const TCHAR* FilePath );
226 static void ClosePipe( void* ReadPipe, void* WritePipe );
227 static bool CreatePipe(void*& ReadPipe, void*& WritePipe, bool bWritePipeLocal = false);
228 static FString ReadPipe( void* ReadPipe );
229 static bool ReadPipeToArray(void* ReadPipe, TArray<uint8> & Output);
230 static bool WritePipe(void* WritePipe, const FString& Message, FString* OutWritten = nullptr);
231 static bool WritePipe(void* WritePipe, const uint8* Data, const int32 DataLength, int32* OutDataLength = nullptr);
232 static bool ExecProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode, FString* OutStdOut, FString* OutStdErr, const TCHAR* OptionalWorkingDirectory = NULL, bool bShouldEndWithParentProcess = false);
234
236 static inline bool IsFirstInstance()
237 {
239 }
248
249
250 // Mac specific
251 static const TCHAR* UserPreferencesDir();
252 static const TCHAR* UserLogsDir();
253
254private:
255
256 static FProcHandle CreateProcInternal(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeStdOutChild, void* PipeStdInChild, void* PipeStdErrChild, bool bInheritHandles);
257};
258
#define NULL
Definition oodle2base.h:134
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EBuildConfiguration
Definition GenericPlatformMisc.h:59
FMacPlatformProcess FPlatformProcess
Definition MacPlatformProcess.h:259
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MacPlatformProcess.h:133
FProcEnumerator & operator=(const FProcEnumerator &)=delete
FProcEnumInfo GetCurrent() const
Definition MacPlatformProcess.cpp:1512
FProcEnumerator(const FProcEnumerator &)=delete
Definition RunnableThread.h:20
Definition Array.h:670
Definition SharedPointer.h:692
Type
Definition GenericPlatformProcess.h:67
@ Open
Definition GenericPlatformProcess.h:69
Definition ApplePlatformProcess.h:11
static CORE_API void ClosePipe(void *ReadPipe, void *WritePipe)
Definition GenericPlatformProcess.cpp:621
static CORE_API void * GetDllExport(void *DllHandle, const TCHAR *ProcName)
Definition GenericPlatformProcess.cpp:65
static CORE_API bool LaunchFileInDefaultExternalApplication(const TCHAR *FileName, const TCHAR *Parms=NULL, ELaunchVerb::Type Verb=ELaunchVerb::Open, bool bPromptToOpenOnFailure=true)
Definition GenericPlatformProcess.cpp:392
static CORE_API const TCHAR * ExecutablePath()
Definition GenericPlatformProcess.cpp:211
static CORE_API bool IsApplicationRunning(uint32 ProcessId)
Definition GenericPlatformProcess.cpp:363
static CORE_API void SetCurrentWorkingDirectoryToBaseDir()
Definition GenericPlatformProcess.cpp:151
static CORE_API void SetThreadAffinityMask(uint64 AffinityMask)
Definition GenericPlatformProcess.cpp:83
static CORE_API FProcHandle OpenProcess(uint32 ProcessID)
Definition GenericPlatformProcess.cpp:311
static CORE_API bool WritePipe(void *WritePipe, const FString &Message, FString *OutWritten=nullptr)
Definition GenericPlatformProcess.cpp:644
static CORE_API void * GetDllHandle(const TCHAR *Filename)
Definition GenericPlatformProcess.cpp:54
static CORE_API void CloseProc(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:328
static CORE_API bool IsProcRunning(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:317
static CORE_API bool ExecProcess(const TCHAR *URL, const TCHAR *Params, int32 *OutReturnCode, FString *OutStdOut, FString *OutStdErr, const TCHAR *OptionalWorkingDirectory=NULL, bool bShouldEndWithParentProcess=false)
Definition GenericPlatformProcess.cpp:381
static CORE_API FString GetCurrentWorkingDirectory()
Definition GenericPlatformProcess.cpp:161
static CORE_API FString GetApplicationName(uint32 ProcessId)
Definition GenericPlatformProcess.cpp:375
static CORE_API uint32 GetCurrentCoreNumber()
Definition GenericPlatformProcess.cpp:77
static CORE_API const TCHAR * GetBinariesSubdirectory()
Definition GenericPlatformProcess.cpp:245
static CORE_API const TCHAR * GetModuleExtension()
Definition GenericPlatformProcess.cpp:239
static CORE_API const TCHAR * ComputerName()
Definition GenericPlatformProcess.cpp:141
static CORE_API void LaunchURL(const TCHAR *URL, const TCHAR *Parms, FString *Error)
Definition GenericPlatformProcess.cpp:260
static CORE_API void WaitForProc(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:323
static CORE_API uint32 GetCurrentProcessId()
Definition GenericPlatformProcess.cpp:71
static CORE_API bool CreatePipe(void *&ReadPipe, void *&WritePipe, bool bWritePipeLocal=false)
Definition GenericPlatformProcess.cpp:626
static CORE_API FString ReadPipe(void *ReadPipe)
Definition GenericPlatformProcess.cpp:632
static CORE_API bool ReadPipeToArray(void *ReadPipe, TArray< uint8 > &Output)
Definition GenericPlatformProcess.cpp:638
static CORE_API FString GenerateApplicationPath(const FString &AppName, EBuildConfiguration BuildConfiguration)
Definition GenericPlatformProcess.cpp:223
static CORE_API void TerminateProc(FProcHandle &ProcessHandle, bool KillTree=false)
Definition GenericPlatformProcess.cpp:333
static CORE_API bool CanLaunchURL(const TCHAR *URL)
Definition GenericPlatformProcess.cpp:281
static CORE_API void ExploreFolder(const TCHAR *FilePath)
Definition GenericPlatformProcess.cpp:398
static CORE_API bool GetProcReturnCode(FProcHandle &ProcHandle, int32 *ReturnCode)
Definition GenericPlatformProcess.cpp:351
static CORE_API FString GetGameBundleId()
Definition GenericPlatformProcess.cpp:287
static CORE_API const TCHAR * BaseDir()
static CORE_API const TCHAR * UserName(bool bOnlyAlphaNumeric=true)
Definition GenericPlatformProcess.cpp:146
static CORE_API const TCHAR * ExecutableName(bool bRemoveExtension=true)
Definition GenericPlatformProcess.cpp:217
static CORE_API FProcHandle CreateProc(const TCHAR *URL, const TCHAR *Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32 *OutProcessID, int32 PriorityModifier, const TCHAR *OptionalWorkingDirectory, void *PipeWriteChild, void *PipeReadChild=nullptr)
Definition GenericPlatformProcess.cpp:293
static CORE_API const FString GetModulesDirectory()
Definition GenericPlatformProcess.cpp:250
static CORE_API class FRunnableThread * CreateRunnableThread()
Definition GenericPlatformProcess.cpp:611
static CORE_API void FreeDllHandle(void *DllHandle)
Definition GenericPlatformProcess.cpp:60
Definition MacPlatformProcess.h:168
Definition MacPlatformProcess.h:126
static void CeaseBeingFirstInstance()
Definition MacPlatformProcess.h:240
static TSharedPtr< IProcessSentinel > CreateProcessSentinelObject()
Definition MacPlatformProcess.h:244
static bool IsFirstInstance()
Definition MacPlatformProcess.h:236
static CORE_API void CeaseBeingFirstInstance()
Definition PosixOSPlatformProcess.cpp:56
static CORE_API TSharedPtr< IProcessSentinel > CreateProcessSentinelObject()
Definition PosixOSPlatformProcess.cpp:152
static CORE_API bool IsFirstInstance()
Definition PosixOSPlatformProcess.cpp:16
Definition AndroidPlatformProcess.h:13
UE_FORCEINLINE_HINT pid_t Get() const
Definition MacPlatformProcess.h:97
pid_t OpenedPid
Definition MacPlatformProcess.h:79
FProcHandle(pid_t InProcPid)
Definition MacPlatformProcess.h:91
FProcState * ProcInfo
Definition MacPlatformProcess.h:72
constexpr FProcHandle()
Definition MacPlatformProcess.h:81
void Reset()
Definition MacPlatformProcess.h:103
FProcHandle(FProcState *InHandle)
Definition MacPlatformProcess.h:86
UE_FORCEINLINE_HINT FProcState * GetProcessInfo() const
Definition MacPlatformProcess.h:116
UE_FORCEINLINE_HINT bool IsValid() const
Definition MacPlatformProcess.h:110
Definition MacPlatformProcess.h:15
bool bHasBeenWaitedFor
Definition MacPlatformProcess.h:62
FProcState(const FProcState &)=delete
FProcState & operator=(const FProcState &)=delete
FProcState()
Definition UnixPlatformProcess.h:23
bool IsRunning()
Definition MacPlatformProcess.cpp:765
UE_FORCEINLINE_HINT pid_t GetProcessId() const
Definition MacPlatformProcess.h:26
void Wait()
Definition MacPlatformProcess.cpp:835
bool GetReturnCode(int32 *ReturnCodePtr)
Definition MacPlatformProcess.cpp:815
~FProcState()
Definition MacPlatformProcess.cpp:757
bool bIsRunning
Definition MacPlatformProcess.h:59
int32 ReturnCode
Definition MacPlatformProcess.h:65
pid_t ProcessId
Definition MacPlatformProcess.h:56
Definition Tuple.h:652
Definition GenericPlatformProcess.h:197