25 #include <sys/types.h>
35 string vLogFileStr(
"/var/log/"+aName+
".log");
37 aServiceLogPtr =
new fstream(vLogFileStr.c_str(),fstream::out);
39 string vMessage =
"Service "+aName+
"(";
41 if (aServiceLogPtr->bad()) {
42 vMessage.append(
"can't open particular log file - ");
43 vMessage.append(to_string(aServiceLogPtr->flags()));
46 delete aServiceLogPtr;
47 aServiceLogPtr =
nullptr;
60 aServiceLogPtr->close();
61 delete aServiceLogPtr;
64 string vMessage =
"Service "+aName+
"(finishing)";
72 (*aServiceLogPtr) << pData << endl;
78 ) :
Thread(
"ServiceThread") {
80 aServiceLogPtr =
nullptr;
95 string vMessage =
"Service "+pName+
"(";
99 vMessage.append(
"main fork failed -");
100 vMessage.append(to_string(errno));
101 vMessage.append(
")");
107 vMessage.append(
"child dispatched)");
115 vMessage.append(
"new session failed - ");
116 vMessage.append(to_string(errno));
117 vMessage.append(
")");
122 if (0 > chdir(
"/")) {
123 vMessage.append(
"can't change to root directory - ");
124 vMessage.append(to_string(errno));
125 vMessage.append(
")");
132 close(STDOUT_FILENO);
133 close(STDERR_FILENO);
142 aThreadInstance = pServiceThreadFactoryRef.
createPtr();;
151 string vMessage(
"Service "+
aName+
"(finished)");
158 if (SIGTERM == pSignal) {
163 Service::aThreadInstance->finish();
164 Service::aThreadInstance->join();
166 delete Service::aThreadInstance;
186 struct sigaction vAction;
188 struct sigaction vOldAction;
191 sigemptyset(&vSignalSet);
192 sigaddset(&vSignalSet,SIGTERM);
195 vAction.sa_mask = vSignalSet;
197 if (sigaction(SIGTERM,&vAction,&vOldAction) < 0) {
198 string vMessage =
"Service "+
aName+
"(terminate handler failed -";
199 vMessage.append(to_string(errno));
200 vMessage.append(
")");
209 sigaction(SIGTERM,&vOldAction,
nullptr);