volatile keep_going = 1; /* controls program termination */
/* Function prototypes: */
void termination_handler (int signum); /* clean up before termination */
int main (void)
{
int listenfd,clifd,i;
char HOME_DIR[30];
long pid;
struct sockaddr_in myaddr,cliaddr;
int ret;
int len;
strcpy(HOME_DIR,"/disk3/teach/html/support/server"
if (chdir (HOME_DIR)) /* change to directory containing data */
{
fprintf (stderr, "`%s': ", HOME_DIR);
perror (NULL);
exit (1);
}
/* Become a daemon: */
switch (fork ())
{
case -1: // can't fork
perror ("fork()"
exit (3);
case 0: // child, process becomes a daemon:
close (STDIN_FILENO);
close (STDOUT_FILENO);
close (STDERR_FILENO);
if (setsid () = -1) // request a new session (job control)
{
exit (4);
}
break;
default: // parent returns to calling process:
return 0;
}
/* Establish signal handler to clean up before termination: */
if (signal (SIGTERM, termination_handler) = SIG_IGN)
signal (SIGTERM, SIG_IGN);
signal (SIGINT, SIG_IGN);
signal (SIGHUP, SIG_IGN);
listenfd=socket(AF_INET,SOCK_STREAM,0);
if (listenfd<0)
{
perror("socket error"
exit(-1);
}
}
void termination_handler (int signum)
{
keep_going = 0;
signal (signum, termination_handler);
}作者: chenhao_no1 时间: 2004-03-19 08:51 标题: 守护进程自己停掉的问题 if the daemon died frequently, place it into /etc/inittab作者: jasonliu 时间: 2004-03-19 16:21 标题: 守护进程自己停掉的问题 不胜感激