9#include <userver/compiler/select.hpp>
10#include <userver/engine/deadline.hpp>
11#include <userver/engine/subprocess/child_process_status.hpp>
12#include <userver/utils/fast_pimpl.hpp>
14USERVER_NAMESPACE_BEGIN
16namespace engine::subprocess {
18class ChildProcessImpl;
21class ChildProcess
final {
24 explicit ChildProcess(ChildProcessImpl&& impl)
noexcept;
27 ChildProcess(ChildProcess&&)
noexcept;
28 ChildProcess& operator=(ChildProcess&&)
noexcept;
43 template <
typename Rep,
typename Period>
44 [[nodiscard]]
bool WaitFor(std::chrono::duration<Rep, Period> duration) {
45 return WaitUntil(Deadline::FromDuration(duration));
51 template <
typename Clock,
typename Duration>
52 [[nodiscard]]
bool WaitUntil(std::chrono::time_point<Clock, Duration> until) {
53 return WaitUntil(Deadline::FromTimePoint(until));
69 static constexpr std::size_t kImplSize = compiler::SelectSize().For64Bit(24).For32Bit(12);
70 static constexpr std::size_t kImplAlignment =
alignof(
void*);
71 utils::FastPimpl<ChildProcessImpl, kImplSize, kImplAlignment> impl_;