linux下c++守护进程的一个奇怪的“死锁”问题……
某鸟 2009-04-09 10:39:43 系统环境:
fedora 10
应用环境
C++ & ACE
一个++写的守护进程调度器(可根据命令行参数决定是否成为守护进程),
功能就是用ace的事件循环+ace定时器+ace的socket监听。
不断输出一句日志信息以便得知其在正常运行,如收到socket消息,
则返回几个字符,并输出收到的内容到日志。
(如不是守护进程启动的话,将输出到控制台)
如收到指定内容的socket消息,
则通过ace的ProcessManager的Spawn方法启动另一个脚本程序。
调用时是根据自己的argv[0]找自己所在目录,然后启动同一目录的脚本。
脚本也很简单,除了#! /bin/sh就一句echo 或者exit(为了模拟无输出的情况)
现象:
守护进程的情况下,如果直接./xxx启动,则可能会无法得知自己所在位置导致启动脚本失败,
发生死锁,并出现一个僵尸进程。这个是绝对的。
问题:
可是,全路径名方式启动的守护进程,如收到消息调用脚本,
竟然也可能在连续几次后调度器就发生死锁。为什么?
开始几次发消息调用另一个脚本都正常,可为啥在几次后就又死锁了呢?
而且这时是没有僵尸进程的,只有一个调度器进程。
即使是通过/bin/sh /xx/xxxx/xxx.sh这样启动这个脚本也会出问题。
为什么呢?
我现在觉得似乎是句柄导致的死锁...
本来想在linux开发版问的,但考虑到这边的牛似乎比那边的多……