G'day h123,
Could you not simply use alarm? Here's a barebones example:
Perl script:
#!/usr/bin/env perl use strict; use warnings; use autodie qw{:all}; my $command = './pm_test_no_echo_nl.sh'; my $timeout = 3; my $pid = open my $pipe_from, '-|', $command; local $SIG{ALRM} = sub { kill HUP => $pid; die "No data\n" }; alarm $timeout; while (<$pipe_from>) { alarm 0; print; alarm $timeout; }
Shell script:
#!/bin/sh echo With newline echo With newline echo "NO newline\c" sleep 5 echo With newline
Output from running the shell script from the command line:
With newline With newline NO newlineWith newline
[When the last line is output, "NO newline" appears immediately, then there's a 5 second delay, then "With newline" appears and the script ends.]
Output from the Perl script:
With newline With newline No data
[The first two lines (containing "With newline") appear immediately, then there's a 3 second delay, then "No data" appears and the script ends immediately.]
You should probably also read the documentation for "/home/<app>/client/bin/<stats>" to determine what the appropriate signal is (for kill) to terminate this program in case it's hanging rather than dying (kill 0 => $pid should tell you that): HUP was fine for my shell script; you may need something different.
See also open (for differences between my syntax and yours) and autodie.
-- Ken
In reply to Re: Check for a new line
by kcott
in thread Check for a new line
by h123
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |