AuroraRuntime/Source/Processes/AuProcess.Unix.hpp

96 lines
2.6 KiB
C++
Raw Normal View History

2021-06-27 21:25:29 +00:00
/***
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
2022-11-17 07:46:07 +00:00
File: AuProcess.Unix.hpp
2021-06-27 21:25:29 +00:00
File: Process.Linux.hpp
Date: 2021-6-12
Author: Reece
***/
#pragma once
2022-06-12 13:53:35 +00:00
#include <Source/IO/Loop/LSEvent.hpp>
#include <Source/IO/FS/FS.hpp>
#if defined(AURORA_IS_LINUX_DERIVED)
#include <Source/IO/UNIX/IOSubmit.Linux.hpp>
#include <Source/IO/FS/Async.Linux.hpp>
using ProcessPipeFileStream = Aurora::IO::FS::LinuxAsyncFileStream;
#else
#include <Source/IO/FS/Async.Unix.hpp>
using ProcessPipeFileStream = Aurora::IO::FS::UnixAsyncFileStream;
#endif
namespace Aurora::Processes
{
void DeinitUnix();
void InitUnix();
2022-04-05 10:18:35 +00:00
struct ProcessImpl : IProcess
2022-04-05 10:18:35 +00:00
{
ProcessImpl(StartupParameters &&params);
2022-04-05 10:18:35 +00:00
~ProcessImpl();
void ShutdownPipes();
bool HasExited() override;
2022-04-05 10:18:35 +00:00
bool TryKill() override;
bool Terminate() override;
AuSPtr<Threading::IWaitable> AsWaitable() override;
2022-06-12 13:53:35 +00:00
AuSPtr<IO::Loop::ILoopSource> AsLoopSource() override;
2022-04-05 10:18:35 +00:00
AuSInt GetExitCode() override;
AuUInt GetProcessId() override;
bool Read(EStandardHandle stream, const AuMemoryViewStreamWrite &destination, bool nonblock) override;
bool Write(const AuMemoryViewStreamRead &source) override;
AuSPtr<IO::IAsyncTransaction> NewAsyncTransaction() override;
AuSPtr<IO::IAsyncTransaction> NewErrorStreamAsyncTransaction() override;
AuSPtr<IO::IIOHandle> GetOutputAndInputHandles() override;
AuSPtr<IO::IIOHandle> GetErrorStreamHandle() override;
AuSPtr<IO::IStreamReader> ToStreamReader(EStandardHandle stream) override;
AuSPtr<IO::IStreamWriter> ToStreamWriter() override;
2022-04-05 10:18:35 +00:00
bool Start() override;
bool Init();
void ByeLol(AuSInt code);
void ForkMain();
void HookMainDeath();
2022-04-05 10:18:35 +00:00
private:
int pipeStdOut_[2] { -1, -1 };
int pipeStdErr_[2] { -1, -1 };
int pipeStdIn_ [2] { -1, -1 };
2022-04-05 10:18:35 +00:00
2022-06-23 12:25:20 +00:00
bool bDontRelOut_ {};
bool bDontRelIn_ {};
bool bDontRelErr_ {};
2022-06-12 13:53:35 +00:00
AuSPtr<IO::Loop::ILSEvent> loopSource_;
AuSPtr<IO::IIOHandle> fsHandle_;
AuSPtr<ProcessPipeFileStream> fsStream_;
AuSPtr<IO::IIOHandle> fsErrorHandle_;
AuSPtr<ProcessPipeFileStream> fsErrorStream_;
2022-04-05 10:18:35 +00:00
AuThreadPrimitives::EventShared_t finished_;
StartupParameters startup_;
2022-04-05 10:18:35 +00:00
ESpawnType type_;
AuList<const char *> cargs_;
AuString debug_;
pid_t pidt_;
bool alive_ {};
AuSInt exitCode_ {};
bool bHasExited {};
2022-04-05 10:18:35 +00:00
};
}