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
In reply to Re^3: Check for a new line
by kcott
in thread Check for a new line
by h123
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |