int initprocess( const char * workdir)
{
int i;
pid_t pid;
if ( (pid = fork()) < 0)
return (-1);
else if (pid)
_exit(0); /* parent terminates */
/* child 1 continues... */
if (setsid() < 0) /* become session leader */
return (-1);
if( signal( SIGHUP, SIG_IGN ) != SIG_ERR )
{
}
if( signal( SIGPIPE, SIG_IGN ) != SIG_ERR )
{
}
if( signal( SIGALRM, SIG_IGN ) != SIG_ERR )
{
}
if( signal( SIGCHLD, SIG_IGN ) != SIG_ERR )
{
}
if ( (pid = fork()) < 0)
return (-1);
else if (pid)
_exit(0); /* child 1 terminates */
/* child 2 continues... */
if( NULL != workdir ) chdir( workdir ); /* change working directory */
/* close off file descriptors */
for (i = 0; i < 64; i++)
close(i);
/* redirect stdin, stdout, and stderr to /dev/null */
open("/dev/null", O_RDONLY);
open("/dev/null", O_RDWR);
open("/dev/null", O_RDWR);
return (0); /* success */
}