> The following was supposedly scribed by
> Andy Adler
> on Sunday 29 February 2004 09:33 pm:
> # doesn't die:
> {
> local $SIG{CHLD} = \&reap;
> open2( $Oout, $Oin, "/bin/sh" );
> }
> print $Oin "echo 'boo1' ; sleep 1; exit\n";
> print while <$Oout>;
{
local $SIG{CHLD} = \&reap;
open2( $Oout, $Oin, "/bin/sh" );
}
print $Oin "echo 'boo1' ; sleep 2; exit\n";
{
local $SIG{CHLD} = \&reap;
print while <$Oout>;
close($Oin);
# it dies ^-- here
close($Oout);
}
For some reason, the signal doesn't come until the input handle is closed.
Presumably, you want to catch it if the child stops unexpectedly, so see if
you can get it to work without the second block.
Note, that on my dual cpu system, this behaves differently sometimes. I'm not
quite sure where that comes from, but it seems that the print statement
occassionally fires twice.
Maybe try it with IPC::Run ?
--Eric
--
Entia non sunt multiplicanda praeter necessitatem.
--Occam's Razor