#include #include #include #ifndef __APPLE__ /* prctl is Linux only */ #include #endif #include #include #include #include #include #include #include #include #include "HyperionConfig.h" #include #include #include #include #include #include "hyperiond.h" using namespace commandline; #define PERM0664 QFileDevice::ReadOwner | QFileDevice::ReadGroup | QFileDevice::ReadOther | QFileDevice::WriteOwner | QFileDevice::WriteGroup void signal_handler(const int signum) { if(signum == SIGCHLD) { // only quit when a registered child process is gone // currently this feature is not active ... return; } QCoreApplication::quit(); // reset signal handler to default (in case this handler is not capable of stopping) signal(signum, SIG_DFL); } void startNewHyperion(int parentPid, std::string hyperionFile, std::string configFile) { pid_t childPid = fork(); // child pid should store elsewhere for later use if ( childPid == 0 ) { sleep(3); execl(hyperionFile.c_str(), hyperionFile.c_str(), "--parent", QString::number(parentPid).toStdString().c_str(), configFile.c_str(), NULL); exit(0); } } int main(int argc, char** argv) { // initialize main logger and set global log level Logger* log = Logger::getInstance("MAIN"); Logger::setLogLevel(Logger::WARNING); // Initialising QCoreApplication QCoreApplication app(argc, argv); signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); signal(SIGABRT, signal_handler); signal(SIGCHLD, signal_handler); signal(SIGPIPE, signal_handler); // force the locale setlocale(LC_ALL, "C"); QLocale::setDefault(QLocale::c()); Parser parser("Hyperion Daemon"); parser.addHelpOption(); BooleanOption & versionOption = parser.add(0x0, "version", "Show version information"); IntOption & parentOption = parser.add ('p', "parent", "pid of parent hyperiond"); // 2^22 is the max for Linux BooleanOption & silentOption = parser.add('s', "silent", "do not print any outputs"); BooleanOption & verboseOption = parser.add('v', "verbose", "Increase verbosity"); BooleanOption & debugOption = parser.add('d', "debug", "Show debug messages"); Option & exportConfigOption = parser.add