23#ifndef _PROCESS_LAUNCHER_H_
24#define _PROCESS_LAUNCHER_H_
32#include <system_error>
37#define _CRT_SECURE_NO_WARNINGS 1
46#include "harness_export.h"
55HARNESS_EXPORT std::string cmdline_quote_arg(
const std::string &arg);
56HARNESS_EXPORT std::string cmdline_from_args(
57 const std::string &executable_path,
const std::vector<std::string> &args);
75 std::vector<std::pair<std::string, std::string>> penv_vars,
76 bool predirect_stderr =
true)
77 : executable_path{
std::move(pexecutable_path)},
78 args{
std::move(pargs)},
79 env_vars{
std::move(penv_vars)},
81 child_in_rd{INVALID_HANDLE_VALUE},
82 child_in_wr{INVALID_HANDLE_VALUE},
83 child_out_rd{INVALID_HANDLE_VALUE},
84 child_out_wr{INVALID_HANDLE_VALUE},
92 redirect_stderr{predirect_stderr} {
107 std::string get_cmd_line()
const;
113 const std::vector<std::string>
args;
114 const std::vector<std::pair<std::string, std::string>>
env_vars;
120 PROCESS_INFORMATION pi;
144 bool child_in_wr_closed =
false;
156 std::vector<std::pair<std::string, std::string>> penv_vars,
157 bool predirect_stderr =
true)
159 std::move(penv_vars), predirect_stderr),
172 rhs.is_alive =
false;
197 int write(
const char *
buf,
size_t count);
202 exit_status_type kill();
230 int wait(std::chrono::milliseconds
timeout = std::chrono::milliseconds(1000));
233 std::chrono::milliseconds
timeout = std::chrono::milliseconds(1000));
253 std::error_code send_shutdown_event(
254 ShutdownEvent
event = ShutdownEvent::TERM)
const noexcept;
265 exit_status_type
close();
exit status of processes.
Definition: exit_status.h:47
Definition: process_launcher.h:135
bool is_alive
Definition: process_launcher.h:270
ProcessLauncher(std::string pexecutable_path, std::vector< std::string > pargs, std::vector< std::pair< std::string, std::string > > penv_vars, bool predirect_stderr=true)
Creates a new process and launch it.
Definition: process_launcher.h:155
SpawnedProcess::id_type process_id_type
Definition: process_launcher.h:205
ProcessLauncher(ProcessLauncher &&rhs)
Definition: process_launcher.h:167
std::mutex fd_out_mtx_
Definition: process_launcher.h:268
ProcessLauncher operator=(const ProcessLauncher &)=delete
std::mutex fd_in_mtx_
Definition: process_launcher.h:267
ShutdownEvent
Definition: process_launcher.h:241
SpawnedProcess::handle_type process_handle_type
Definition: process_launcher.h:204
ProcessLauncher(const ProcessLauncher &)=delete
an alive, spawned process
Definition: process_launcher.h:72
virtual ~SpawnedProcess()=default
const std::vector< std::pair< std::string, std::string > > env_vars
Definition: process_launcher.h:114
SpawnedProcess(const SpawnedProcess &)=default
bool redirect_stderr
Definition: process_launcher.h:127
pid_t id_type
Definition: process_launcher.h:104
pid_t handle_type
Definition: process_launcher.h:103
SpawnedProcess(std::string pexecutable_path, std::vector< std::string > pargs, std::vector< std::pair< std::string, std::string > > penv_vars, bool predirect_stderr=true)
Definition: process_launcher.h:74
pid_t childpid
Definition: process_launcher.h:123
std::string executable() const
Definition: process_launcher.h:109
const std::string executable_path
Definition: process_launcher.h:112
const std::vector< std::string > args
Definition: process_launcher.h:113
Definition: expected.h:943
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
static int count
Definition: myisam_ftdump.cc:44
Definition: buf0block_hint.cc:29
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:497
static int wait(mysql_cond_t *that, mysql_mutex_t *mutex, const char *, unsigned int)
Definition: mysql_cond_v1_native.cc:51
stdx::expected< void, std::error_code > close(file_handle_type native_handle)
close file handle.
Definition: file.h:238
Definition: varlen_sort.h:183
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2873
required string event
Definition: replication_group_member_actions.proto:31
@ KILL
Definition: task.h:231
#define HANDLE
Definition: violite.h:158