免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2271 | 回复: 5
打印 上一主题 下一主题

hp unix 进程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-27 09:03 |只看该作者 |倒序浏览
现在有一个电信发送预存款的程序,fork一个子进程,然后父进程退出,这个字进程扫描一张表,如果有记录则发给其他运营商,但是发生这种情况,个别时候(大约每天一次)因为发送失败发生意外,进程退出,但是实际上好像并没有退出,另外有一个进程在运行!根据日志看也是如此:已经记录了server exit!但是同一时间又有其他纪录,表明进程还在!
此程序在十几个地市运行均没发现此问题(hp 11.0和 aix),是不是跟hp unix 11.0有关呢?系统有bug还是参数问题?
请高手帮忙,谢谢!这个问题已经出现一个月了,每次都手工调帐

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-06-30 13:44 |只看该作者

hp unix 进程问题

进程发生异常退出后,有记录了信息,估计你做了atexit。

如果不是的话,那么记录的东西从哪里来的。

还有,进程之前可能存在一些通讯关系,这个服务进程的exit导致了其它的进程接受到了信息,触发做一些动作。

检查的办法很简单,看看你的日志是那个进程记录的。

根据进程号去查找。

还有,hp-11应该不会从在你说得哪种bug。

论坛徽章:
0
3 [报告]
发表于 2003-06-30 14:27 |只看该作者

hp unix 进程问题

server exit!是这个发送预存款的子进程应该停了,代码如下:
if(!bGetSyncData())
{
       CCommon:rintMess("bGetSyncData failed ,return -1,Server exited!!";
       exit(-1);
}
但是业务处理却继续进行。程序结构如下:
main()
{
CSyncFund syncfund;     
nPid = fork();
if(nPid == -1)
                        {
                                CCommon:rintMess("Can't fork daemon!";
                                exit(1);
                        }
                        else if(nPid>;0)        //Parent progress
                        {
                                //CCommon:rintMess("This is the parent progress!";
                                exit(0);
                        }
                       
                        //Child progress
                        syncfund.Run();

                        CCommon:rintMess("Server exited!";
return 0;


}

void CSyncFund::Run()
{
               
        while(TRUE)
        {
                sleep(m_nSleepTime);
                m_nCurTimeCnt -= m_nSleepTime;
               
                if(m_nCurTimeCnt < 0)
                {
                        if(bRebootTuxApp())
                                CCommon:rintMess("reboot %s succeed!", m_szRebootAppName);
                        else
                                CCommon:rintMess("reboot %s failed!", m_szRebootAppName);
                               
                        m_nCurTimeCnt = m_nRebootTime;
                        sleep(m_nSleepTime*5);
                }
               
                if(!bGetSyncData()) //得到预存款
                {
                        CCommon:rintMess("bGetSyncData failed ,return -1,Server exited!!";
                        exit(-1);
                }
                if(!bSendSyncData()) //发送预存款
                {
                        CCommon:rintMess("bSendSyncData failed ,return -2,Server exited!!";
                        exit(-2);
                }
                //exit(0);
        }

}

论坛徽章:
0
4 [报告]
发表于 2003-06-30 14:29 |只看该作者

hp unix 进程问题

谢谢!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-06-30 14:50 |只看该作者

hp unix 进程问题

不全业务逻辑怎么走,主要是分析进程。

看你的代码main里面fork后,父进程exit了。
子进程处理while(1)里面。如果其中的过程
if(!bGetSyncData()) //得到预存款

if(!bSendSyncData()) //发送预存款

两者中的任何一个异常exit了,这个进程就不存在了。

不会是hp-11的问题。

论坛徽章:
0
6 [报告]
发表于 2003-06-30 15:19 |只看该作者

hp unix 进程问题

可是当进程应该停掉的时候(已经在日志上记录 Server exited!),但是日志上却显示继续处理业务,因为日志时间没有间断,会不会是exit()并没有停止该进程呢?我已经修改了程序,可是要等到出错也许要过一段时间。
   谢谢!另外发现一个奇怪的问题:日志上对某一业务动作纪录的时间比数据库中(oracle)要早10分钟!(应该是相同的,因为用了sysdate),所有的纪录都早?为什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP