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