http://qs321.pair.com?node_id=11111616


in reply to Re: Signal to a sleeping Perl program
in thread Signal to a sleeping Perl program

Try using select instead of sleep - at least on linux it does not rely on ALRM, it's a single system call.

#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11111522 use warnings; # borrowed from choroba use feature qw{ say }; local $SIG{USR1} = sub { say STDERR "Signal 1 caught."; }; local $SIG{USR2} = sub { say STDERR "Bye!"; exit }; my $sum = 0; while (1) { $sum += $_ for 1 .. 100; say $sum; say STDERR scalar localtime, " Sleeping..."; select undef, undef, undef, 10; say STDERR scalar localtime, " Ready!"; }

I don't have a Solaris to test on, but this works as expected on my linux system.