1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/perl
=pod
=head1 NAME
signal.t - Test suite IPC::Run->signal
=cut
use strict;
BEGIN {
$| = 1;
$^W = 1;
if( $ENV{PERL_CORE} ) {
chdir '../lib/IPC/Run' if -d '../lib/IPC/Run';
unshift @INC, 'lib', '../..';
$^X = '../../../t/' . $^X;
}
}
use Test::More;
use IPC::Run qw( :filters :filter_imp start run );
use t::lib::Test;
BEGIN {
if ( IPC::Run::Win32_MODE() ) {
plan skip_all => 'Skipping on Win32';
exit(0);
} else {
plan tests => 3;
}
}
my @receiver = (
$^X,
'-e',
<<'END_RECEIVER',
my $which = " ";
sub s{ $which = $_[0] };
$SIG{$_}=\&s for (qw(USR1 USR2));
$| = 1;
print "Ok\n";
for (1..10) { sleep 1; print $which, "\n" }
END_RECEIVER
);
my $h;
my $out;
$h = start \@receiver, \undef, \$out;
pump $h until $out =~ /Ok/;
ok 1;
$out = "";
$h->signal( "USR2" );
pump $h;
$h->signal( "USR1" );
pump $h;
$h->signal( "USR2" );
pump $h;
$h->signal( "USR1" );
pump $h;
ok $out, "USR2\nUSR1\nUSR2\nUSR1\n";
$h->signal( "TERM" );
finish $h;
ok( 1 );
|