读书人

请问:写守护进程函数时出错

发布时间: 2012-04-08 14:38:30 作者: rapoo

请教:写守护进程函数时出错!
主函数调用init_daemon函数,当执行到 关闭打开的文件描述符后就异常退出了,也不会执行主函数里面的发送数据,
怎么回事呢?
代码如下:
void init_daemon(void)
{
int pid;
int i;

if(pid=fork())
exit(0);//是父进程,结束父进程
else if(pid< 0)
exit(1);//fork失败,退出
//是第一子进程,后台继续执行

setsid();//第一子进程成为新的会话组长和进程组长
//并与控制终端分离
if(pid=fork())
exit(0);//是第一子进程,结束第一子进程
else if(pid< 0)
exit(1);//fork失败,退出
//是第二子进程,继续
//第二子进程不再是会话组长

for(i=0;i< NOFILE;++i)//关闭打开的文件描述符
close(i);
chdir("/tmp");//改变工作目录到/tmp
umask(0);//重设文件创建掩模
return;
}
2.main函数

main()
{
init_daemon();//初始化为Daemon
........(略:后面的代码用来发送数据)
}



[解决办法]
把关闭文件描述符注释掉就可以了。
至于为什么,不清楚。关注。。。。。。
[解决办法]

探讨
把关闭文件描述符注释掉就可以了。
至于为什么,不清楚。关注。。。。。。

[解决办法]
把errno打出来看看。
[解决办法]
if(pid=fork())

改成
if( (pid=fork())>0 ) //父进程的条件判断还是要严谨,不然容易出错。


是看的我转的那篇文章吗?有些地方不太严谨。、
[解决办法]
是我搞错了。

进程并没有退出。

你ps一下应该可以看到进程已经变成了守护进程。


[解决办法]
探讨
没人知道吗?急啊!

读书人网 >UNIXLINUX

热点推荐