DeerithEngine/deerith_engine_core/src/server_execution.cpp
2026-10-09 08:54:31 +02:00

51 lines
934 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;
}
void deerith::execute_server(const char *server_executable_path, int port)
{
pid_t pid = fork();
if (pid < 0)
{
deerith_error("execute_server fatal error");
}
if (pid > 0)
{
executing_servers.push_back(pid);
deerith_trace("server created");
}
else
{
execl(server_executable_path,
server_executable_path,
"-p",
"8080",
nullptr);
deerith_error("Fatal error executing server");
_exit(1);
}
}
void deerith::shutdown_executing_servers()
{
for (pid_t pid : executing_servers)
{
kill(pid, SIGTERM);
waitpid(pid, nullptr, 0);
}
executing_servers.clear();
}