Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^2: Signal to a sleeping Perl program

by afoken (Chancellor)
on Jan 17, 2020 at 15:29 UTC ( [id://11111528]=note: print w/replies, xml ) Need Help??


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

One way would be to break up the 15 minute sleep into smaller mini-sleeps. Presumably, waking up would allow your script to respond to the request to terminate.

Any signal, or at least any non-ignored signal interrupts sleep. No need for polling. See also sleep:

Causes the script to sleep for (integer) EXPR seconds, or forever if no argument is given. Returns the integer number of seconds actually slept.

May be interrupted if the process receives a signal [...]

Note: sleep() returns how long it actually slept, so your program can continue sleeping for the remaining time if some signal happened in between.

The C API sleep() behaves similar, see sleep(3), but it returns the remaining sleep time, not the time actually slept.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
  • Comment on Re^2: Signal to a sleeping Perl program

Replies are listed 'Best First'.
Re^3: Signal to a sleeping Perl program
by QM (Parson) on Jan 20, 2020 at 10:59 UTC
    Any signal, or at least any non-ignored signal interrupts sleep.

    Many forget this, and expect that a literal sleep 60 may not actually take 60s, but could be anything less than that. In one-off scripts I've seen code like this (untested):

    sub my_sleep { my $sleep_time = (shift or 1); # total time to sleep my $sleep_interval = (shift or 10); # wake up at least this often my $start = time; $stop_time = $start + $sleep_time; while (time < $stop_time) { sleep $sleep_time; # handle wake up tasks } my $elapsed = time - $start; return $elapsed; # total time actually slept (plus shipping and ha +ndling) }

    You may want additional conditions, and use this as a timeout mechanism. There's probably a nice module for that, or roll your own.

    But the point is sleep comes with an unspoken if (...), if something else doesn't wake me up.

    -QM
    --
    Quantum Mechanics: The dreams stuff is made of

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11111528]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2024-04-25 15:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found