LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 918|回复: 8

daemon问题

[复制链接]
发表于 2004-8-10 11:50:01 | 显示全部楼层 |阅读模式
自己要写一个daemon程序,可是却不知道如何调试,没有办法,只好先写一个不是daemon的程序,然后写一个函数使它成为daemon。

问题出现了……,在非daemon下调试不会退出的。可是在daemon下调试会退出。
不知道怎么办才好
  1. void init_daemon(void)
  2. {
  3.         int pid;

  4.         if((pid=fork()) > 0)
  5.         {
  6.                 exit(0);
  7.         }//是父进程,结束父进程
  8.         else if(pid< 0)
  9.                 _exit(1);//fork失败,退出
  10.         //是第一子进程,后台继续执行
  11.                
  12.         setsid();//第一子进程成为新的会话组长和进程组长 并与控制终端分离
  13.         if((pid=fork()) > 0)
  14.         exit(0);//是第一子进程,结束第一子进程
  15.         else if(pid< 0)
  16.         _exit(1);//fork失败,退出
  17.         //是第二子进程,继续
  18.         //第二子进程不再是会话组长
  19. 因为本人程序中需要读写文件所以没用执行关闭文件描述符
  20. //signal(SIGCHLD,SIG_IGN);
  21. //      for(i=3;i< NOFILE;++i)//关闭打开的文件描述符
  22. //      close(i);
  23.         chdir("/");//改变工作目录到/
  24.         umask(0);//重设文件创建掩模
  25.         return;
  26.         }
复制代码



大家说说
发表于 2004-8-10 12:25:32 | 显示全部楼层
只好先写一个不是daemon的程序,然后写一个函数使它成为daemon。

你上面的源码是指那个使程序成为daemon的“函数”吗?
那daemon程序啥样?
你说的“非daemon下”和“daemon下”分别指什么情况?
 楼主| 发表于 2004-8-10 14:52:36 | 显示全部楼层
也许是说大了,就是以子进程运行,脱离了父进程。
在/etc/init.d/下启动脚本中用daemon /path/process来执行就行了
只用启动脚本中的daemon具体是做什么的现在也不是很清楚,惭愧!
发表于 2004-8-10 15:02:30 | 显示全部楼层
考虑到你的需要,是不是看看man 3 daemon ?
发表于 2004-8-10 16:56:32 | 显示全部楼层
还是不明白楼主是怎么调试的
 楼主| 发表于 2004-8-10 17:03:42 | 显示全部楼层
就是先调试余下的部分,然后在主程序main中先调用 init_daemon函数
 楼主| 发表于 2004-8-10 17:04:43 | 显示全部楼层
最初由 lucifer 发表
考虑到你的需要,是不是看看man 3 daemon ?


谢谢,可是还是有些不一样,关键的是想搞明白daemon是怎么写的。否则以后出问题也不知道在哪
发表于 2004-8-12 17:25:19 | 显示全部楼层
看unix环境高级编程,里面有讲
 楼主| 发表于 2004-8-13 11:35:51 | 显示全部楼层
就是看过了,所以写出了这点东西,可是不知道哪里出现问题的呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表