in reply to monitor a process's state.

How do you determine if a child "hangs"? I mean which criteria would you use?

See perlipc for general ideas of communicating with processes.

Replies are listed 'Best First'.
Re^2: monitor a process's state.
by sierpinski (Chaplain) on May 06, 2010 at 13:32 UTC
    I was wondering the same thing... Especially if you're not waiting for it to finish, how can you ever know if it is hung or not?

    I've used Parallel::ForkManager in the past to spawn processes, but it also has a 'wait_all_children' function that will cause it to wait until all of the children processes are finished. In that case, you can have the child processes return a variable denoted that it completed successfully, errored, returned invalid results, etc.

    Of course it depends on what you're trying to accomplish, but if you don't wait for the children to finish, I can't imagine that you'd know whether or not they ever really did finish.
      Well, if one defines "hanging" as "using more CPU time than a certain, fixed amount", then one could use wait_all_children in the parent process, and set CPU time limits with BSD::Resource in each child process.

      Of course that requires re-organizing the previous task of the parent process into a child process, but as the others have mentioned, that's a pretty good idea anyway.