in reply to Check for a new line
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Check for a new line
by h123 (Novice) on Jan 28, 2014 at 09:19 UTC | |
|
Re^2: Check for a new line
by h123 (Novice) on Jan 28, 2014 at 14:03 UTC | |
by kcott (Archbishop) on Jan 29, 2014 at 05:22 UTC | |
by h123 (Novice) on Jan 29, 2014 at 09:39 UTC |