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 ?
In reply to pipe-ing the 'tail' results in 'broken pipe' by angshuman
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |