Ping puzzle

Kevin D. Clark kclark at CetaceanNetworks.com
Wed Mar 26 15:27:51 EST 2003


John Chambers <jc at trillian.mit.edu> writes:

> Here's a bizarre puzzle that I've been trying  to  solve  on  several
> linux boxen:  How does a parent process read the stderr of /bin/ping?
> 
> It oughta be trivial.  But consider this ping of a  machine  that  is
> down at the moment:
> 
> $ /bin/ping -n -i 10 64.28.81.46
> PING 64.28.81.46 (64.28.81.46) from 207.172.135.95 : 56 data bytes
> From 64.14.70.146: Destination Host Unreachable
> From 64.14.70.146: Destination Host Unreachable
> ...
> 
> Those error messages come out on stderr.  Running under bash, I tried
> piping it to a few commands:

> Ahy ideas?  Can someone make them work?

I'm fairly certain that those "From 64.14.70.146: Destination Host
Unreachable" messages aren't going to stderr.  To prove this to
myself, I typed:

  ping -n -i 1 somemachine >stdout 2>stderr

and after a while, I killed this.  

The stderr file was empty, and the stdout file had all of my expected
output.

(I'm sure you see where I'm going at this point...)

So, what is going on here is that ping's stdio layer is detecting that
its stdout isn't being directed at a tty, so it is configuring its
output to be fully buffered, and not line-buffered.  Since you're
specifying an interval of 10 seconds, it takes quite a while for
ping's stdio layer to flush...

Hope this helps,

--kevin
-- 
Kevin D. Clark / Cetacean Networks / Portsmouth, N.H. (USA)
cetaceannetworks.com!kclark (GnuPG ID: B280F24E)
alumni.unh.edu!kdc




More information about the Discuss mailing list