[Pdx-pm] Apache, mod_perl, Catalyst, qx, and the ampersand

Michael G Schwern schwern at gmail.com
Wed Dec 20 16:39:14 PST 2006


Randall Hansen wrote:
> On Dec 20, 2006, at 3:35 PM, Roderick A. Anderson wrote:
> 
>> 	qx{ script_that_does_the_get_and_other_magic & };
> 
> that's one way.  here's another:
> 
> http://www.stonehenge.com/merlyn/LinuxMag/col39.html
> 
> i've used something like merlyn's fork technique several times and it  
> works well.  it's pretty easy to have some part of the app "notice"  
> when a process is finished and notify the user.

For those of use who never can remember which side of the if/else is the parent and which is the child and the idea of two conditions of a branch running simultaneously makes their brain melt and having all that forking housekeeping code scattered around, I like to do something like this....

sub worker (&) {
    my $worker = shift;

    if( my $pid = fork ) {  # parent
        ...do whatever housekeeping the parent needs to do...
    }
    elsif( defined $pid ) { # child
        ...do whatever housekeeping the child needs to do...
        $worker->();
        ...cleanup...
    }
    else {
        ...fork error...
    }
}

Then just call it like so:

worker {
    ...child code...
};

This gives you a sane, generic forking routine which is easy to understand.  Into this you can pack the necessary voodoo to cleanly fork a child and cleanup the inevitable mess.


More information about the Pdx-pm-list mailing list