Class definition SigHandler.h :
class SigHandler
{
public:
SigHandler();
~SigHandler();
bool setSignalToHandle(int sig);
static bool isSignalSet();
static void setSignal(int unused);
private:
static bool m_signalSet;
};
Implenentation SigHandler.cpp:
#include "SigHandler.h"
#include "signal.h"
using namespace std;
bool SigHandler::m_signalSet = false;
SigHandler::SigHandler()
{
}
SigHandler::~SigHandler()
{
}
bool SigHandler::setSignalToHandle(int sig)
{
if(signal(sig, SigHandler::setSignal) == SIG_ERR) {
return false;
}
return true;
}
void SigHandler::setSignal(int unused)
{
m_signalSet = true;
}
bool CxmlSigHandler::isSignalSet()
{
return m_signalSet;
}
A method is required to handle the signal and must return void and take an int parameter.
static void setSignal(int unused);
This is registered with the signal function from signal.h and is invoked whenever the signal is triggered.
bool SigHandler::setSignalToHandle(int sig)
{
if(signal(sig, SigHandler::setSignal) == SIG_ERR) {
return false;
}
return true;
}
Whenever the signal "sig" is encountered this method is called and will set our flag to true.
Below is a simple example which will loop until a SIGTERM is encountered (generated by kill command):
SigHandler sigHandler;
sigHandler.setSignalToHandle(SIGTERM); //register SIGTERM to be handled
while(!sigHandler.isSignalSet() { //loop until signal received
//do stuff here
}
For reference: signal.h
No comments:
Post a Comment