On Feb 26, 2013, at 2:11 AM, Mike Dubman wrote:
> On Mon, Feb 25, 2013 at 6:24 PM, Jeff Squyres (jsquyres)
> wrote:
> >Looking at the code, you're checking for zombie status before MTT kills the
> >proc. Am I reading that right?
> I don`t think the order matters, if process is not Zombie yet and about to be
> killed by MTT later - it is a good flow.
> If process is already Zombie - mtt will not be able to kill it anyway and and
> can stop waiting and switch to the new task.
No, the _kill_proc() routine does both a kill() and a waitpid(). The waitpid()
should reap the zombie.
I.e., if the process has died, MTT simply just hasn't reaped it yet. Hence,
it's a zombie.
> >If so, then it could well be that the process has exited but not yet been
> >reaped (because _kill_proc() hasn't been invoked yet). If this is the case,
> >is the real cause of the problem that >the OUTread and ERRread aren't being
> >closed when the child process exits, and therefore we keep looping looking
> >for new output from them?
> yep, sounds like it can be the cause, need to look into this code.
Ok. It would be interesting to see if the process dies, but:
1) MTT is still blocking in select() (i.e., OUTread and OUTerr aren't returning
0 from sysread upon process death)
2) $done is somehow not getting set to 0, and therefore MTT is still looping
until the timeout expires
--
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/