My Application had already configured a SIGTERM
handler.
Ex:
Signal(SIGTERM, &signalHandler);
I want to do some processing before shutdown and I cannot do change in existing signal handler. To do my processing, I placed a hook like this configured my handler as
signal(SIGTERM, &mySignalHandler);
mySignalHandler
calls signalHandler
later after doing its processing to make system unaffected even after the hook.
Now, considering the fact that mySignalHandler
will be invoked, It works when kill $pid
once.
But if I do it twice or more time. signalHandler
gets called. As far as I know SIG_DFL
should be performed in this case.
Anybody knows the reason for this.
I am using “Red Hat Enterprise Linux AS release 4 (Nahant Update 8)”
[EDIT]:strange behaviour faced with test program
#undef _GNU_SOURCE
using namespace std;
volatile sig_atomic_t signalHandlerVar_ = false;
volatile sig_atomic_t signalHandlerSecondVar_ = false;
extern "C" void signalHandler(int)
{
signalHandlerVar_ = true;
}
extern "C" void signalHandlerSecond(int value)
{
signalHandlerSecondVar_ = true;
}
void* threadFunc(void*)
{
while(1)
{
if(signalHandlerVar_)
{
cout<<"signalHandler_ "<<signalHandlerVar_<<endl;
signalHandlerVar_ = false;
}
if(signalHandlerSecondVar_)
{
cout<<"signalHandlerSecond_ "<<signalHandlerSecondVar_<<endl;
signalHandlerSecondVar_ = false;
}
}
return NULL;
}
int main()
{
::signal(SIGTERM, &signalHandler);
::signal(SIGTERM, &signalHandlerSecond);
pthread_t thread;
if(pthread_create(&thread, NULL, &threadFunc, NULL))
{
cout<<"pthread create failed"<<endl;
return 1;
}
pthread_join(thread, NULL);
}
Here problem i am facing, on every kill $pid it calls signalHandlerSecond.as i am using #undef _GNU_SOURCE and tried #undef _BSD_SOURCE.But it should reset it to SIG_DFL.
Can anybody suggest where i am doing wrong?