日期:2014-05-16  浏览次数:20679 次

请教:写守护进程函数时出错!
主函数调用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一下应该可以看到进程已经变成了守护进程。


------解决方案--------------------
探讨
没人知道吗?急啊!