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 66 67 68 69 70
|
#!/usr/bin/perl -w
use strict;
use IO::Async::Test;
use Test::More tests => 6;
use POSIX qw( SIGINT WEXITSTATUS WIFSIGNALED WTERMSIG );
use IO::Async::Loop::Poll;
my $loop = IO::Async::Loop::Poll->new;
testing_loop( $loop );
{
my $exitcode;
$loop->fork(
code => sub { return 5; },
on_exit => sub { ( undef, $exitcode ) = @_ },
);
wait_for { defined $exitcode };
is( WEXITSTATUS($exitcode), 5, 'WEXITSTATUS($exitcode) after child exit' );
}
{
my $exitcode;
$loop->fork(
code => sub { die "error"; },
on_exit => sub { ( undef, $exitcode ) = @_ },
);
wait_for { defined $exitcode };
is( WEXITSTATUS($exitcode), 255, 'WEXITSTATUS($exitcode) after child die' );
}
{
local $SIG{INT} = sub { exit( 22 ) };
my $exitcode;
$loop->fork(
code => sub { kill SIGINT, $$ },
on_exit => sub { ( undef, $exitcode ) = @_ },
);
wait_for { defined $exitcode };
is( WIFSIGNALED($exitcode), 1, 'WIFSIGNALED($exitcode) after child SIGINT' );
is( WTERMSIG($exitcode), SIGINT, 'WTERMSIG($exitcode) after child SIGINT' );
}
{
local $SIG{INT} = sub { exit( 22 ) };
my $exitcode;
$loop->fork(
code => sub { kill SIGINT, $$ },
on_exit => sub { ( undef, $exitcode ) = @_ },
keep_signals => 1,
);
wait_for { defined $exitcode };
is( WIFSIGNALED($exitcode), 0, 'WIFSIGNALED($exitcode) after child SIGINT with keep_signals' );
is( WEXITSTATUS($exitcode), 22, 'WEXITSTATUS($exitcode) after child SIGINT with keep_signals' );
}
|