vijayk has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I want to know how we can use callback functions within perl for a scenario as follows. I have a parent process with N number of child's. The parent sleeps for some time and returns back to check whether any child is alive. If it is then it says "Processing" and goes back to sleep. If all the children are completed, the parent exits with saying a status of "Completed". I want to know how callback functions can be used for this kind of scenario. Please give me your comments and suggestions. Thanks and Regards, -vijay
  • Comment on Working with callback functions with Perl

Replies are listed 'Best First'.
Re: Working with callback functions with Perl
by erroneousBollock (Curate) on Nov 13, 2007 at 08:27 UTC
    Hi, I want to know how we can use callback functions within perl for a scenario as follows. I have a parent process with N number of child's.
    You don't want callbacks, you want signals.

    The parent sleeps for some time and returns back to check whether any child is alive. If it is then it says "Processing" and goes back to sleep.
    After you've forked your children, handle the SIGCHLD signal appropriately to be notified when a child process has exited.

    If all the children are completed, the parent exits with saying a status of "Completed".
    As you handle the signal from each child process, remove its process id from a hash you filled when you forked the processes.

    If you need to pass data to/from the processes, you can use one of many mechanisms described in perlipc.

    Or you can do all of that with a simple OO interface: Parallel::ForkManager. :-)

    I want to know how callback functions can be used for this kind of scenario
    You can only really use callbacks in the same process and thread. You can use a construct approximating callbacks under threads.

    -David

Re: Working with callback functions with Perl
by ait (Hermit) on Nov 13, 2007 at 14:53 UTC
    Hi. Take a look at POE. It will make your life so much easier!