in lib/Search/Elasticsearch/TestServer.pm [116:148]
sub _start_node {
#===================================
my ( $self, $dir, $transport, $http ) = @_;
my $pid_file = File::Temp->new;
my @config = $self->_command_line( $pid_file, $dir, $transport, $http );
my $int_caught = 0;
{
local $SIG{INT} = sub { $int_caught++; };
defined( my $pid = fork )
or throw( 'Internal', "Couldn't fork a new process: $!" );
if ( $pid == 0 ) {
throw( 'Internal', "Can't start a new session: $!" )
if setsid == -1;
exec(@config) or die "Couldn't execute @config: $!";
}
else {
for ( 1 .. 5 ) {
last if -s $pid_file->filename();
sleep 1;
}
open my $pid_fh, '<', $pid_file->filename;
my $pid = <$pid_fh>;
throw( 'Internal', "No PID file found for Elasticsearch" )
unless $pid;
chomp $pid;
push @{ $self->{pids} }, $pid;
$self->_starter_pid($$);
}
}
$SIG{INT}->('INT') if $int_caught;
}