后台程序在运行,但结果不对!

zly1980 2005-06-08 02:18:41
/*需求:在LINUX下建立一个在机器启动后可以自动运行的后台网络服务程序*/
void init_daemon(void) ;
void startApp();
void * ACCEPT(void *p);
int main()
{
init_daemon();
StartApp();
while(true)
sleep(100000);
}
void startApp()
{
pthread_t AcceptThreadHandle;
pthread_create(&AcceptThreadHandle, NULL, ACCEPT,(void *)NULL);
}
void * ACCEPT(void *p)
{
pthread_detach(pthread_self());
int fd=socket(AF_INET,SOCK_STREAM,0);
int newfd;
bind(.....);
listen(......);
while(true)
{
...
newfd=accept(...);
recv(...);//接收NEWFD的数据,并且一样的发送回去.
send(...);
close(newfd);
}
return NULL;
}
//我编译出来放在/root/test
//如果我在终端上输入/root/test运行后返回终端,在WINDOWS用个客户程序去测试,可以收到返回的数据,但是我在/etc/rc.local文件里面加入:/root/test,再从起机器后用ps -ef可以看到TEST进程,用netstat -a也可以看到TEST兼听的端口,但是就是WINDOWS的客户程序收不到返回数据了!!!!怎么回事呢?
}
//操的函数:
void init_daemon(void)
{
int pid;
int i;
pid = fork();
if (pid)
{
exit(0);
}
else if (pid < 0)
{
printf("\t\t创建进程失败\n");
exit(1);
}
setsid();
pid = fork();
if (pid)
{
exit(0);
}
else if (pid < 0)
{
printf("\t\t创建进程失败\n");
exit(1);
}

for (i = 0; i < 256; ++i)
{
close(i);
}
chdir("../article");
umask(0);
return;
}
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zly1980 2005-07-30
  • 打赏
  • 举报
回复
都说了即使用守护进程只要程序是在终端中运行就正常咯!只要在自动启动的才有问题!你看我的问题.
yyy790601 2005-07-10
  • 打赏
  • 举报
回复
后台运行应该在/etc/rc.local里的启动脚本后面加&,不然启动可能会造成阻塞。
至于你说的问题,单步调试吧。查清错误出在哪个位置才是关键。
yiyi999999999 2005-07-09
  • 打赏
  • 举报
回复
还有,你的程序一个是用进程,一个是用线程,不一样啊。可能是你的线程出问题了。
yiyi999999999 2005-07-09
  • 打赏
  • 举报
回复
在你的程序里把提示信息都写到日志文件中,出问题后就看看文件中有写什么信息,然后再来对照程序查看,比你现在毫无头绪的找要快的多。
zly1980 2005-07-09
  • 打赏
  • 举报
回复
怎么记录啊?我觉得不是ACCEPT那的问题
core 2005-06-09
  • 打赏
  • 举报
回复
ACCEPT中怎么没有错误检查?记下发生的错误就能解决问题了
gomo544409 2005-06-08
  • 打赏
  • 举报
回复
你先不用守护进程看看你的那个程序是否运行正常,这样方便调试。然后再改回守护进程的~

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧