$pid = pcntl_fork(); if ($pid == -1) { die("Could not fork!"); } else { if ($pid) { // store the pid $fp = fopen(PIDFILE, "w+"); fwrite($fp, $pid . "\n" . time()); fclose($fp); while (file_exists(PIDFILE)) { usleep(50000); } } else { //$checker = new ProxyCheckerImpl(); $checker = new ParanoidProxyCheckerImpl(); $framework = new ProxyFramework("framework.db", $checker, 7200, 5400, 1, 30, 20, PIDFILE); $atom = new AtomintersoftModule(); $samair = new SamairModule(); $freechecker = new FreeCheckerModule(); $nntime = new NNTimeModule(); $framework->addModule($atom); // since samair.ru is down most of the time, perform this check before adding the samair module to PF print "Checking Samair\n"; fw('samair.ru', 80, '-A'); $test = shell_exec('curl -f samair.ru -m 20 --connect-timeout 20'); //fw('samair.ru', 80, '-D'); if (trim($test) != '' && strpos($test, "connect() timed out") === false) { $framework->addModule($samair); } $framework->addModule($freechecker); print "Checking NNTime\n";
public static function handler($sig) { ProxyFramework::$instance->getLogger()->logEntry(LoggingImpl::LEVEL_DEBUG, "Handler called for PID " . posix_getpid() . "." . (ProxyFramework::$mainPid != null ? " Main PID is " . ProxyFramework::$mainPid . "." : "")); // the main process will call the shots $cond = posix_getpid() == ProxyFramework::$mainPid; if ($cond) { ProxyFramework::$instance->stop(); ProxyFramework::$instance->getLogger()->logEntry(LoggingImpl::LEVEL_INFO, "Shutting down main process (" . ProxyFramework::$mainPid . ")."); ProxyFramework::$mainPid = null; } // if shutdown trigger occurred out of lock block we can safely end the process here, // otherwise it should wait for the lock block to finish and end it there if (!$cond || !(ProxyFramework::$instance->getLockBlockState() & STATE_LOCKED)) { if ($cond) { ProxyFramework::$instance->getLogger()->logEntry(LoggingImpl::LEVEL_INFO, ProxyFramework::$instance->getLockBlockState() & STATE_LOCKED_CT ? "Shutdown occurred in checking thread lock block" : "Shutdown occurred out of lock block."); } die; // so that all threads exit } }