Go to the documentation of this file.
17 #include <condition_variable>
66 : m_checkThreshold(iPSet.getUntrackedParameter<unsigned
int>(
"numberOfAllowedFailedChecksInARow")),
67 m_secsBetweenChecks(iPSet.getUntrackedParameter<unsigned
int>(
"secondsBetweenChecks")),
70 m_numberChecksWhenNotAlive(0) {
162 edm::LogError(
"JobStuck") <<
"Too long since the job has last made progress.";
166 <<
" seconds since job seen progressing";
194 desc.
addUntracked<
unsigned int>(
"secondsBetweenChecks", 60)
195 ->setComment(
"Number of seconds to wait between checking if progress has been made.");
196 desc.
addUntracked<
unsigned int>(
"numberOfAllowedFailedChecksInARow", 3)
197 ->setComment(
"Number of allowed checks in a row with no progress.");
198 descriptions.
add(
"ZombieKillerService", desc);
void watchPreModuleEndStream(PreModuleEndStream::slot_type const &iSlot)
void watchPreModuleBeginStream(PreModuleBeginStream::slot_type const &iSlot)
static void fillDescriptions(ConfigurationDescriptions &descriptions)
ZombieKillerService(edm::ParameterSet const &, edm::ActivityRegistry &)
void watchPostModuleGlobalEndRun(PostModuleGlobalEndRun::slot_type const &iSlot)
const unsigned int m_checkThreshold
void watchPostSourceRun(PostSourceRun::slot_type const &iSlot)
void watchPreSourceLumi(PreSourceLumi::slot_type const &iSlot)
void watchPostModuleStreamBeginLumi(PostModuleStreamBeginLumi::slot_type const &iSlot)
bool isProcessWideService(ZombieKillerService const *)
void watchPreModuleEndJob(PreModuleEndJob::slot_type const &iSlot)
#define DEFINE_FWK_SERVICE(type)
std::atomic< bool > m_stillAlive
void watchPostModuleGlobalBeginRun(PostModuleGlobalBeginRun::slot_type const &iSlot)
void watchPostModuleStreamEndRun(PostModuleStreamEndRun::slot_type const &iSlot)
void watchPreModuleStreamBeginRun(PreModuleStreamBeginRun::slot_type const &iSlot)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
void watchPostModuleEndJob(PostModuleEndJob::slot_type const &iSlot)
void watchPreModuleGlobalBeginLumi(PreModuleGlobalBeginLumi::slot_type const &iSlot)
void watchPreModuleStreamEndLumi(PreModuleStreamEndLumi::slot_type const &iSlot)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void watchPostModuleEndStream(PostModuleEndStream::slot_type const &iSlot)
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal
void watchPreModuleStreamBeginLumi(PreModuleStreamBeginLumi::slot_type const &iSlot)
std::mutex m_jobDoneMutex
static boost::mutex mutex
const unsigned int m_secsBetweenChecks
void watchPreSourceRun(PreSourceRun::slot_type const &iSlot)
void watchPostSourceLumi(PostSourceLumi::slot_type const &iSlot)
std::thread m_watchingThread
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void watchPreModuleGlobalEndLumi(PreModuleGlobalEndLumi::slot_type const &iSlot)
void watchPreModuleStreamEndRun(PreModuleStreamEndRun::slot_type const &iSlot)
void watchPostModuleGlobalEndLumi(PostModuleGlobalEndLumi::slot_type const &iSlot)
std::atomic< unsigned int > m_numberChecksWhenNotAlive
void watchPreModuleGlobalEndRun(PreModuleGlobalEndRun::slot_type const &iSlot)
void watchPostModuleStreamEndLumi(PostModuleStreamEndLumi::slot_type const &iSlot)
std::condition_variable m_jobDoneCondition
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
void watchPreModuleGlobalBeginRun(PreModuleGlobalBeginRun::slot_type const &iSlot)
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
void watchPostModuleGlobalBeginLumi(PostModuleGlobalBeginLumi::slot_type const &iSlot)
void watchPostModuleStreamBeginRun(PostModuleStreamBeginRun::slot_type const &iSlot)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)