in reply to Re: Check for a new line
in thread Check for a new line

Is there a way to print "No data" every x seconds until program 'B' comes back up? I don't want to kill the process. I'd rather log No data every 10 seconds. If this makes sense?

Replies are listed 'Best First'.
Re^3: Check for a new line
by kcott (Archbishop) on Jan 29, 2014 at 05:22 UTC

    You control the timeout activity with the coderef you assign to $SIG{ALRM}. There's no requirement to kill or die.

    In the test shell script, I increased the delay (to get a few periods of no output) and added a loop (to emulate the stop/start behaviour):

    #!/bin/sh for i in {1..3}; do echo With newline echo With newline echo "NO newline\c" sleep 10 echo With newline done

    In the Perl script, I just changed

    local $SIG{ALRM} = sub { kill HUP => $pid; die "No data\n" };

    to

    local $SIG{ALRM} = sub { alarm 0; print "No data\n"; alarm $timeout };

    Here's the new output:

    With newline With newline No data No data No data NO newlineWith newline With newline With newline No data No data No data NO newlineWith newline With newline With newline No data No data No data NO newlineWith newline

    Perhaps take a look at perlipc: Signals. This has more information on Signals in general; it also has another $SIG{ALRM} example.

    -- Ken

      Thanks that did the trick, I have the script working as expected now