53 lines
977 B
C++
53 lines
977 B
C++
#include <deerith/engine.h>
|
|
#include <unistd.h>
|
|
#include <sys/wait.h>
|
|
|
|
#include <deerith/core/log.h>
|
|
#include <vector>
|
|
|
|
#include <csignal>
|
|
|
|
namespace deerith
|
|
{
|
|
std::vector<pid_t> executing_servers;
|
|
}
|
|
|
|
bool deerith::execute_client(const char *client_executable_path, int port)
|
|
{
|
|
pid_t pid = fork();
|
|
|
|
if (pid < 0)
|
|
{
|
|
deerith_error("execute_client fatal error");
|
|
return false;
|
|
}
|
|
|
|
if (pid > 0)
|
|
{
|
|
executing_servers.push_back(pid);
|
|
deerith_trace("server created");
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
execl(client_executable_path,
|
|
client_executable_path,
|
|
"-p",
|
|
"8080",
|
|
nullptr);
|
|
|
|
deerith_error("fatal error executing client");
|
|
_exit(1);
|
|
}
|
|
}
|
|
|
|
void deerith::shutdown_executing_servers()
|
|
{
|
|
for (pid_t pid : executing_servers)
|
|
{
|
|
kill(pid, SIGTERM);
|
|
waitpid(pid, nullptr, 0);
|
|
}
|
|
|
|
executing_servers.clear();
|
|
} |