// Signal handler for handling shutdowns static void signal_cb(int signum) { if (instance == NULL || instance->isShutdown()) { return; } LoggerPtr logger = Logger::getLogger("capture-engine"); // alarm means timeout has expired if (signum == SIGALRM) { logger->warning(CONTEXT, "Alarm expired, forcing shutdown"); instance->forceShutdown(); } else if (instance->isRunning()) { logger->info(CONTEXT, "Shutting down due to signal"); instance->tryShutdown(); // if we haven't shut down in 2 seconds, alarm and force it signal(SIGALRM, signal_cb); alarm(2); } else { logger->warning(CONTEXT, "Ignoring signal, already shutting down: %s", instance->getStateName().c_str()); } }