免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1339 | 回复: 6
打印 上一主题 下一主题

守护进程自己停掉的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-18 16:31 |只看该作者 |倒序浏览
各位老大,我写的一个守护进程经常会莫名其妙的没了,怎么回事呀?帮帮俺吧

论坛徽章:
0
2 [报告]
发表于 2004-03-18 16:34 |只看该作者

守护进程自己停掉的问题

dao.

more detail.

论坛徽章:
0
3 [报告]
发表于 2004-03-18 16:49 |只看该作者

守护进程自己停掉的问题

server程序守护一个端口,accept成功以后就fork一个子进程去读执行程序名称然后EXECLP调起这个一个执行程序,这个执行程序继续从端口读取数据,并执行相关处理,处理完毕返回。

论坛徽章:
0
4 [报告]
发表于 2004-03-18 17:00 |只看该作者

守护进程自己停掉的问题

兄弟,说明白点呀!

论坛徽章:
0
5 [报告]
发表于 2004-03-18 18:11 |只看该作者

守护进程自己停掉的问题

这样写吧,这个模版应该不会出现你说的问题


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);
     }

    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    myaddr.sin_port=htons(8895);        //port

    ret=bind(listenfd,(struct sockaddr *)&myaddr,sizeof(myaddr));
    if (ret<0)
     {
      perror("bind error";
      exit(-1);
     }
    listen(listenfd,10);
    len=sizeof(struct sockaddr);
while(1)
     {
      clifd=accept(listenfd,(struct sockaddr*)&cliaddr,&len);

      if(clifd=-1)
       {
        perror("accept error";
        continue;
        }
         
       
      switch(pid=fork())
       {
        case 0:
                    close(listenfd);
               
                 读写!
                      exit(0);
                   break;
        case -1:
           perror("fork error";
           break;
           default:
           close(clifd);
           break;

      }
   }

   close(listenfd);
   close(clifd);
   return 0;

   
}
void termination_handler (int signum)
{
  keep_going = 0;
  signal (signum, termination_handler);
}

论坛徽章:
0
6 [报告]
发表于 2004-03-19 08:51 |只看该作者

守护进程自己停掉的问题

if the daemon died frequently,  place it into /etc/inittab

论坛徽章:
0
7 [报告]
发表于 2004-03-19 16:21 |只看该作者

守护进程自己停掉的问题

不胜感激
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP