00001
00002
00003
00004
00005
00006
00007
00008 #include "SysPlusPlus/syscall.h"
00009 #include "ComPlusPlus/Daemon.h"
00010
00011 #include <stdlib.h>
00012 #include <unistd.h>
00013 #include <signal.h>
00014
00015
00025 void syspp::Daemon::Daemonize_light() {
00026 #ifdef SIGPIPE
00027 signal ( SIGPIPE, SIG_IGN);
00028 #endif
00029 #ifdef SIGHUP
00030 signal ( SIGHUP, SIG_IGN);
00031 #endif
00032 #ifdef SIGCLD
00033 signal ( SIGCLD, SIG_IGN);
00034 #endif
00035 #ifdef SIGCHLD
00036 signal ( SIGCHLD, SIG_IGN);
00037 #endif
00038 #ifdef SIGURG
00039 signal ( SIGURG, SIG_IGN);
00040 #endif
00041
00042 }
00043
00076 void syspp::Daemon::Daemonize_full() {
00077
00078 syspp::Call::Chdir ( "/" );
00079
00080
00081 #ifdef SIGINT
00082 signal ( SIGINT, SIG_IGN);
00083 #endif
00084 #ifdef SIGQUIT
00085 signal ( SIGQUIT, SIG_IGN);
00086 #endif
00087 #ifdef SIGILL
00088 signal ( SIGILL, SIG_IGN);
00089 #endif
00090 #ifdef SIGTRAP
00091 signal ( SIGTRAP, SIG_IGN);
00092 #endif
00093 #ifdef SIGABRT
00094 signal ( SIGABRT, SIG_IGN);
00095 #endif
00096 #ifdef SIGIOT
00097 signal ( SIGIOT, SIG_IGN);
00098 #endif
00099 #ifdef SIGBUS
00100 signal ( SIGBUS, SIG_IGN);
00101 #endif
00102 #ifdef SIGFPE
00103 signal ( SIGFPE, SIG_IGN);
00104 #endif
00105 #ifdef SIGUSR1
00106 signal ( SIGUSR1, SIG_IGN);
00107 #endif
00108 #ifdef SIGUSR2
00109 signal ( SIGUSR2, SIG_IGN);
00110 #endif
00111 #ifdef SIGALRM
00112 signal ( SIGALRM, SIG_IGN);
00113 #endif
00114 #ifdef SIGSTKFLT
00115 signal ( SIGSTKFLT, SIG_IGN);
00116 #endif
00117 #ifdef SIGTSTP
00118 signal ( SIGTSTP, SIG_IGN);
00119 #endif
00120 #ifdef SIGTTIN
00121 signal ( SIGTTIN, SIG_IGN);
00122 #endif
00123 #ifdef SIGTTOU
00124 signal ( SIGTTOU, SIG_IGN);
00125 #endif
00126 #ifdef SIGXCPU
00127 signal ( SIGXCPU, SIG_IGN);
00128 #endif
00129 #ifdef SIGXFSZ
00130 signal ( SIGXFSZ, SIG_IGN);
00131 #endif
00132 #ifdef SIGVTALRM
00133 signal ( SIGVTALRM, SIG_IGN);
00134 #endif
00135 #ifdef SIGPROF
00136 signal ( SIGPROF, SIG_IGN);
00137 #endif
00138 #ifdef SIGWINCH
00139 signal ( SIGWINCH, SIG_IGN);
00140 #endif
00141 #ifdef SIGPOLL
00142 signal ( SIGPOLL, SIG_IGN);
00143 #endif
00144 #ifdef SIGIO
00145 signal ( SIGIO, SIG_IGN);
00146 #endif
00147 #ifdef SIGPWR
00148 signal ( SIGPWR, SIG_IGN);
00149 #endif
00150 #ifdef SIGSYS
00151 signal ( SIGSYS, SIG_IGN);
00152 #endif
00153
00154
00155 switch ( syspp::Call::Fork () ) {
00156 case -1: {
00157 break;
00158 }
00159 case 0: {
00160 break;
00161 }
00162 default: {
00163 exit(0);
00164 }
00165 }
00166
00167 }
00168
00169 syspp::Daemon::Daemon() {
00170 syspp::Daemon::Daemonize_full();
00171 }
00172
00173 syspp::Daemon::~Daemon() {
00174 }