in reply to CGI and System

You want to close stdout in the subprocess. Try

system("blah blah blah > /dev/null &");
There are many other ways to do this, too - I'd probably perform my own fork, and in the child I'd close STDOUT, and then exec(qw(blah blah blah)), but I prefer the list version of exec and system over the scalar version.

Replies are listed 'Best First'.
Re^2: CGI and System
by perlknight (Pilgrim) on Feb 18, 2005 at 18:46 UTC
    sorry, I have tried this as well.
    system("bla blah > /path/blafile &");
    this has the same result.
      Might I ask what it is you are doing? You might want to examine the command to see if there's a way to spead it up.

      Also, remember that I/O to a device (in this case, a file on a drive) is often the slowest part of a system. I believe that writing to /dev/null rather than an actual file can speed things up if you don't need to store the output. At least, I think it does, or at least did once upon a time. If you can redirect to /dev/null instead, that might help.

      --
      tbone1, YAPS (Yet Another Perl Schlub)
      And remember, if he succeeds, so what.
      - Chick McGee

        the command is
        arecord <arg...> > /path/record.wav

        open to suggestions on other alternative method of doing this via browser.

      Last "try this - I haven't" idea: close stderr, too. Perhaps 2> /dev/null would be about right. Ideally, you'd fork, close stdout and stderr in the child, then exec your command, still in the child. Or, in your case, redirect stdout to a file, close stderr, then exec your command.