-sub trysig {
- my ($n, $s) = @_;
- my $pid = fork;
- if (!defined $pid) {
- die "$s: fork() failed : $!";
- } elsif ($pid == 0) {
- local $SIG{$s} = sub { exit EXIT_SUCCESS };
- 1 while 1;
- }
- my $ret = EXIT_FAILURE;
- eval {
- local $SIG{ALRM} = sub { die };
- alarm 1;
- kill $n, $pid;
- waitpid $pid, 0;
- $ret = $?;
- alarm 0;
- };
- if ($@) {
- kill SIGINT, $pid;
- kill SIGTERM, $pid;
- kill SIGKILL, $pid;
- die "$s: $@";
- }
- ok($ret == EXIT_SUCCESS, $s);
-}