1 #ifndef WREPORT_SUBPROCESS_H 2 #define WREPORT_SUBPROCESS_H 37 bool m_terminated =
false;
38 int m_stdin[2] = { -1, -1 };
39 int m_stdout[2] = { -1, -1 };
40 int m_stderr[2] = { -1, -1 };
41 Redirect m_stdin_action = Redirect::UNCHANGED;
42 Redirect m_stdout_action = Redirect::UNCHANGED;
43 Redirect m_stderr_action = Redirect::UNCHANGED;
59 virtual int main() noexcept = 0;
69 std::vector<int>
pass_fds = std::vector<int>();
72 std::string
cwd = std::string();
116 pid_t
pid()
const {
return m_pid; }
147 bool wait(
int msecs);
166 int main() noexcept
override;
174 std::vector<std::string>
env;
179 Popen(std::initializer_list<std::string>
args);
184 void setenv(
const std::string& key,
const std::string& val);
int get_stdin() const
Return the file descriptor to the stdin pipe to the child process, if configured, else -1...
std::string executable
pathname to the executable of the child process, defaults to args[0] if empty
Definition: subprocess.h:172
Definition: subprocess.h:163
int raw_returncode() const
Return the raw return code as returned by wait(2)
Definition: subprocess.h:125
std::vector< std::string > args
argv of the child process
Definition: subprocess.h:170
void close_stderr()
Close the pipe from the child process stderr.
std::string cwd
Change to this directory in the child process.
Definition: subprocess.h:72
int returncode() const
Return the return code of the subprocess; this is undefined if it has not terminated yet...
void close_stdin()
Close the pipe to the child process stdin.
void set_stderr(int fd)
Request to redirect the child stderr to this given file descriptor.
bool start_new_session
If true, call setsid() in the child process.
Definition: subprocess.h:75
bool terminated() const
Return true if the process has terminated.
Definition: subprocess.h:131
static std::string format_raw_returncode(int raw_returncode)
Format the status code returned by wait(2)
void fork()
Start the child process.
void send_signal(int sig)
Send the given signal to the process.
virtual void post_fork_child()
Function called after fork in the child process.
pid_t pid() const
Return the PID of the subprocess, or 0 if it has not started yet.
Definition: subprocess.h:116
int get_stdout() const
Return the file descriptor to the stdout pipe from the child process, if configured, else -1.
void kill()
Send SIGKILL to the process.
bool started() const
Return true if the process has started.
Definition: subprocess.h:128
bool poll()
Check if the process has terminated. Returns true if it has.
int wait()
Wait for the child process to terminate and return its return code.
bool close_fds
After fork, close all file descriptors >=2 in the child.
Definition: subprocess.h:63
virtual void pre_fork()
Function called before forking.
String functions.
Definition: benchmark.h:13
virtual int main() noexcept=0
Main function called in the child process.
void set_stdout(int fd)
Request to redirect the child stdout to this given file descriptor.
void copy_env_from_parent()
Override env with the contents of environment.
std::vector< std::string > env
environment variables to use for the child process
Definition: subprocess.h:174
Definition: subprocess.h:32
int get_stderr() const
Return the file descriptor to the stderr pipe from the child process, if configured, else -1.
std::vector< int > pass_fds
Do not close these file descriptors in the child process (implies close_fds = true) ...
Definition: subprocess.h:69
int main() noexcept override
Main function called in the child process.
void close_stdout()
Close the pipe from the child process stdout.
void set_stdin(int fd)
Request to redirect the child stdin to this given file descriptor.
virtual void post_fork_parent()
Function called after fork in the parent process.
void terminate()
Send SIGTERM to the process.