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


in reply to Signal to a sleeping Perl program

Thanks everyone for responses. The OS I'm actually working on is Solaris, and I've had various thoughts about how to forcefully break into the loop, but the consensus here seems to be that the signal handler should work - it just doesn't!

Replies are listed 'Best First'.
Re^2: Signal to a sleeping Perl program
by tybalt89 (Prior) on Jan 20, 2020 at 00:49 UTC

    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.

Re^2: Signal to a sleeping Perl program
by LanX (Cardinal) on Jan 19, 2020 at 23:43 UTC
    Maybe you should have replied earlier, most of us thought you are on Windows.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice