version 1.19, 2003/05/21 11:32:22
|
version 1.19.6.1, 2003/08/13 19:39:56
|
|
|
// Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) | // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
// Marek Szermutzky, IBM (ddt6szer@de.ibm.com) | // Marek Szermutzky, IBM (ddt6szer@de.ibm.com) |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
|
|
#include <sys/types.h> | #include <sys/types.h> |
#include <sys/stat.h> | #include <sys/stat.h> |
#if defined(PEGASUS_OS_HPUX) | #if defined(PEGASUS_OS_HPUX) |
|
|
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
| |
Boolean handleSigUsr1 = false; | Boolean handleSigUsr1 = false; |
|
Boolean graveError = false; |
void cim_server_service(int argc, char **argv ) { return; } | void cim_server_service(int argc, char **argv ) { return; } |
| |
pid_t server_pid; | pid_t server_pid; |
|
|
handleSigUsr1 = true; | handleSigUsr1 = true; |
} | } |
| |
|
void sigTermHandler(int s_n, PEGASUS_SIGINFO_T * s_info, void * sig) |
|
{ |
|
graveError= handleSigUsr1=true; |
|
} |
// daemon_init , RW Stevens, "Advance UNIX Programming" | // daemon_init , RW Stevens, "Advance UNIX Programming" |
| |
int cimserver_fork(void) | int cimserver_fork(void) |
{ | { |
getSigHandle()->registerHandler(PEGASUS_SIGUSR1, sigUsr1Handler); | getSigHandle()->registerHandler(PEGASUS_SIGUSR1, sigUsr1Handler); |
getSigHandle()->activate(PEGASUS_SIGUSR1); | getSigHandle()->activate(PEGASUS_SIGUSR1); |
|
getSigHandle()->registerHandler(SIGTERM, sigTermHandler); |
|
getSigHandle()->activate(SIGTERM); |
| |
pid_t pid; | pid_t pid; |
if( (pid = fork() ) < 0) | if( (pid = fork() ) < 0) |
{ | { |
getSigHandle()->deactivate(PEGASUS_SIGUSR1); | getSigHandle()->deactivate(PEGASUS_SIGUSR1); |
|
getSigHandle()->deactivate(SIGTERM); |
return(-1); | return(-1); |
} | } |
else if (pid != 0) | else if (pid != 0) |
|
|
sleep(1); | sleep(1); |
waitTime--; | waitTime--; |
} | } |
exit(0); |
exit(graveError); |
} | } |
| |
setsid(); | setsid(); |
|
|
| |
// get the pid of the cimserver process | // get the pid of the cimserver process |
server_pid = getpid(); | server_pid = getpid(); |
|
|
return(0); | return(0); |
} | } |
| |
|
|
| |
// notify parent process to terminate so user knows that cimserver | // notify parent process to terminate so user knows that cimserver |
// is ready to serve CIM requests. | // is ready to serve CIM requests. |
void notify_parent(void) |
void notify_parent(int id) |
{ | { |
pid_t ppid = getppid(); | pid_t ppid = getppid(); |
|
if (id) |
|
kill(ppid, SIGTERM); |
|
else |
kill(ppid, PEGASUS_SIGUSR1); | kill(ppid, PEGASUS_SIGUSR1); |
} | } |