#pragma once #include #include #include #include #include #include "utils/IChildProcess.hpp" class ChildProcess : public IChildProcess { public: ~ChildProcess(); ChildProcess(boost::asio::io_context& ioContext, const std::filesystem::path& path, const Args& args); private: void asyncRead(std::byte* data, std::size_t bufferSize, ReadCallback callback) override; void asyncWaitForData(WaitCallback cb) override; std::size_t readSome(std::byte* data, std::size_t bufferSize) override; bool finished() override; void kill(); void drain(); bool wait(bool block); // return true if waited using FileDescriptor = boost::asio::posix::stream_descriptor; boost::asio::io_context& _ioContext; FileDescriptor _childStdout; ::pid_t _childPID {}; bool _waited {}; std::optional _exitCode; };