免费注册 查看新帖 |

Chinaunix

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

遇到一个棘手的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-09 09:22 |只看该作者 |倒序浏览
我有一个程序a, fork出来用exec启动了程序b,一直监控程序b的执行情况,一旦发现b出问题就杀掉b,再fork用exec启动程序b
b的话依赖于LD_LIBRARY_PATH中的某个动态库,a运行在后台,a程序运行一段时间后,不断重启程序b,就开始不断的报错:b依赖的动态库找不到了,但是我手工检查LD_LIBRARY_PATH动态库路径正确,可以重启,感觉LD_LIBRARY_PATH在后台的环境变量被改变了,不知道是啥原因?大家谁遇到过这种情况,小弟第一次碰到这个问题,很棘手!!!

a启动b的过程如下:
pid = fork()
if(pid == 0)
{
    execv(b);
    perror();
    exit(-1);
}

论坛徽章:
0
2 [报告]
发表于 2012-03-09 09:50 |只看该作者
运行一段时间过后居然找不到动态库了,这个真的蛮郁闷的
难道execv会改变环境参数么?

论坛徽章:
0
3 [报告]
发表于 2012-03-09 10:28 |只看该作者
a进程是如何监控它的子进程b的啊?

也就是说,a通过什么判断b“出问题了”?

论坛徽章:
0
4 [报告]
发表于 2012-03-09 11:32 |只看该作者
通过设置的时间,发送了一个任务给它,在规定的时间内没有返回给我应答, 我就认为b断掉了

论坛徽章:
0
5 [报告]
发表于 2012-03-09 11:58 |只看该作者
回复 4# hxs880


    似乎问题不是找不到动态库,也不是 LD_LIBRARY_PATH 被改,而是a进程杀掉b进程后,重新fork出来的子进程无法再次载入动态库,难道是因为杀掉子进程时没清理干净?

论坛徽章:
0
6 [报告]
发表于 2012-03-09 13:32 |只看该作者
杀掉进程以后,通过ps查看进程已经不在了,动态库应该直接被卸载掉了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP