angshuman has asked for the wisdom of the Perl Monks concerning the following question:
I have the following piece of code to track a log-file.
I search for a pattern e.g. /Some pattern/, and come out when i get one.
open PIPE, "-|", "/usr/bin/tail", "-f", "$perf_logfile" or die "could not start 'tail' on $perf_logfile: $!";
while (<PIPE>) { if ( $_ =~ /(Some pattern)/i ) { print("- $1 encountered"); last; } } close PIPE;
This was resulting in...
/usr/bin/tail: write error: Broken pipe
/usr/bin/tail: write error
as I close the pipe, even when 'tail' is pouring its heart's content into it.
I knew the problem but decided to live with it as this was the closest best to what i wanted, with a simple implementation.
Lately i have seen it resulting in hangs in the 'close PIPE' statement; after i had a change in my workspace.
Question :
Is there a way to send CRTL-C to the /tail/ process ?
before I try and close the pipe associated with it.
Am hoping in that way i won't be seeing the hangs/errors.
Why does it work in some cases and not in another ? What does this typically depend on ?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: pipe-ing the 'tail' results in 'broken pipe'
by Anonymous Monk on Jun 17, 2013 at 08:45 UTC | |
by angshuman (Novice) on Jun 17, 2013 at 10:19 UTC |