diff --git a/start/src/main.cpp b/start/src/main.cpp index 78fbf0f43..74de393c3 100644 --- a/start/src/main.cpp +++ b/start/src/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "helpers/Logger.hpp" @@ -28,14 +29,23 @@ static void onSignal(int sig) { exit(0); } +static void terminateChildOnSignal(int signal) { + struct sigaction sa; + sa.sa_handler = onSignal; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + int ret = sigaction(signal, &sa, nullptr); + if (ret != 0) + g_logger->log(Hyprutils::CLI::LOG_WARN, "Failed to set up handler for signal {}: {}", signal, strerror(errno)); +} + int main(int argc, const char** argv, const char** envp) { g_logger = makeUnique(*g_loggerMain); g_logger->setName("start-hyprland"); g_logger->setLogLevel(Hyprutils::CLI::LOG_DEBUG); - signal(SIGTERM, ::onSignal); - signal(SIGINT, ::onSignal); - signal(SIGKILL, ::onSignal); + terminateChildOnSignal(SIGTERM); + terminateChildOnSignal(SIGINT); int startArgv = -1; @@ -84,4 +94,4 @@ int main(int argc, const char** argv, const char** envp) { } return 0; -} \ No newline at end of file +}