6#include <init.capnp.proxy.h>
24namespace fs = std::filesystem;
31 path.remove_filename();
33 return {path.string(), std::to_string(fd)};
35 return std::make_tuple(mp::ConnectStream<InitInterface>(loop, fd),
pid);
41 std::ofstream(
"debug.log", std::ios_base::app) <<
log_data.message << std::endl;
47 std::cout <<
"Usage: mpexample\n";
51 std::promise<mp::EventLoop*>
promise;
52 std::thread loop_thread([&] {
64 std::cout <<
"Enter the equation, or \"exit\" to quit: ";
65 std::getline(std::cin,
eqn);
66 if (
eqn ==
"exit")
break;
75 std::cout <<
"Bye!" << std::endl;
Event loop implementation.
void loop()
Run event loop.
static auto Spawn(mp::EventLoop &loop, const std::string &process_argv0, const std::string &new_exe_name)
static void LogPrint(mp::LogMessage log_data)
int WaitProcess(int pid)
Wait for a process to exit and return its exit code.
int SpawnProcess(int &pid, FdToArgsFn &&fd_to_args)
Spawn a new process that communicates with the current process over a socket pair.
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.