1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
// -*- C++ -*-
//
// Package: FWCore/Services/test
// Class : SignallingAnalyzer
//
// Implementation:
// [Notes on implementation]
//
// Original Author: Chris Jones
// Created: Sat, 22 Mar 2014 23:07:05 GMT
//
// system include files
// user include files
#include "FWCore/Framework/interface/global/EDAnalyzer.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/allowedValues.h"
#include <csignal>
class SignallingAnalyzer : public edm::global::EDAnalyzer<> {
public:
SignallingAnalyzer(edm::ParameterSet const& iPSet) : m_signal(iPSet.getUntrackedParameter<std::string>("signal")) {}
void analyze(edm::StreamID, edm::Event const&, edm::EventSetup const&) const final {
if (m_signal == "INT") {
raise(SIGINT);
}
if (m_signal == "ABRT") {
raise(SIGABRT);
}
if (m_signal == "SEGV") {
raise(SIGSEGV);
}
if (m_signal == "TERM") {
raise(SIGTERM);
}
}
static void fillDescriptions(edm::ConfigurationDescriptions& iConf) {
edm::ParameterSetDescription desc;
desc.ifValue(edm::ParameterDescription<std::string>("signal", "INT", false),
edm::allowedValues<std::string>("INT", "ABRT", "SEGV", "TERM"))
->setComment("which signal to raise.");
iConf.addDefault(desc);
}
private:
std::string const m_signal;
};
DEFINE_FWK_MODULE(SignallingAnalyzer);
|