in reply to forks.pm, CGI::App,TT and DBD::mysql

The problems you are seeing when you are forking are because you are getting a copy of your DB handle in your child processes this is going to cause problems when they go out of scope or whatever. Either disconnect before you fork or connect after so this doesn't happen.

/J\

  • Comment on Re: forks.pm, CGI::App,TT and DBD::mysql

Replies are listed 'Best First'.
Re^2: forks.pm, CGI::App,TT and DBD::mysql
by perldragon80 (Sexton) on Jul 30, 2004 at 23:34 UTC
    Thanks for the info about the DBH and forks. I got some of the errors to go away by closing the conn before the fork. I still have the same error with FileHandles and forks.pm. I decided to simplify the issue by creating a single script with no other modules and still saw the error with this one little script. This works just fine as soon as I comment out forks

    #!/usr/bin/perl -w
    # forks_test.pl
    use forks;

    my $pid = open(CLI, "$ENV{HOME}/bin/cli all -D |") or die "couldn't fork: $!\n";
    my $output = '';
    while(<CLI>) {
    #chomp($_);
    if ($_ =~ /\w+.*/) {
    $output .= $_;
    print "$_\n";
    } else {
    }
    }
    close(CLI);

    [prompt> ./forks_test.pl
    cat: write error: Broken pipe

    Any ideas out there about this one? I am using perl 5.8.5 on a RH9 linux box.

      This works just fine as soon as I comment out forks.

      Then leave use forks; commented out. Problem solved.

      That may sound like sarcasm, but it's also good advice. You do not need forks.pm in order to use fork or the forking open.

      Read the documentation on forks and you'll discover that it is a way of emulating the threads api. for those situations where threads are (or were) unreliable.

      For what you are doing in this snippet, you do not need and should not be using forks.

      So stop forking around and stop trying to use the module for things that it was not intended for :)

      You might also try reading http://perlmonks.com/index.pl?node=Writeup%20Formatting%20Tips


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon
        Thanks for your response.
        I didn't make myself as clear as I should have. In my original post I meant I was using threads (but didn't want to because of their unreliability and processor + memory intensive consumption).

        I then realized I might be able to use forks.pm and not have to change any of my threads code (plus I thought it might even be faster due to the speed of the system fork in linux). When I tried this is when I ran into several problems, one of which was the filehandle error. I slimmed it all down to one little script just to show that there was an issue with the forks.pm module and opening filehandles.

        Thanks for all the help already given and for any future advice, about perl as well as site etiquette. :)