in reply to Re: Re: Re: Re: Re: Re: Re: Re: Passing function to a function using \&<function name> method
in thread Passing function to a function using \&<function name> method

What happens is that there are two processes running from the exec line and the kill will only kill of the parent of the two processes.

I don't know why a redirection would create 2 processes, but if I wanted to get the output of the child, I would just spawn a child with a filehandle attached, and read it from the parent. I would change the spawn function as follows. WARNING: I haven't tested this at all):

sub spawn { my ($timeout, @cmd) = @_; defined( my $child_pid = open(CHILD_OUTPUT, "-|" ) or die "fork: $!"; if ($child_pid) { # parent eval { local $SIG{ALRM} = sub { timeout($child_pid); }; alarm $timeout; while (<CHILD_OUTPUT>) { # log it } close(CHILD_OUTPUT) or warn "process $child_pid exited: $? +"; alarm 0; }; if ($@) { print "oops: $@"; } } else { # child exec @cmd or die "exec: $!"; } }
--
edan (formerly known as 3dan)

  • Comment on Re: Re: Re: Re: Re: Re: Re: Re: Re: Passing function to a function using \&<function name> method
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Passing function to a function using \&<function name> method
by Anonymous Monk on Mar 18, 2004 at 21:29 UTC
    Hi Edan,

    Thanks very much for your example code, I shall integrate it into my script and do some testing with it.

    Thanks again,

    Richard Thomas.
      Hi Edan,

      Thanks for the example code, I have done the integration and tested it and even deployed it and it all works fine on Linux.

      I am now trying to use it on Windows and I get the following error:
      '-' is not recognized as an internal or external command, operable pro +gram or batch file.
      I have been debugging the script and found it to come from the following line:
      defined(my $child_pid=open(CHILD_OUTPUT, "-|")) or die "fork: $!";
      Is there a way to make this work on Windows, or will this have to be a Unix only facility?

      Thanks,

      Richard Thomas.