No subject
Thu Apr 25 10:42:02 EDT 2019
...
Those error messages come out on stderr. Running under bash, I tried
piping it to a few commands:
$ /bin/ping -n -i 10 64.28.81.46 2>&1 | more
That's all the output I got in over a minute. The stderr messages
didn't appear. So I tried:
$ /bin/ping -n -i 10 64.28.81.46 2>&1 | tee ping.log
Again, that's all I ever saw, and the ping.log file was empty after a
minute (and after killing the task with ^C).
OK; how about a trivial test:
$ /bin/ping -n -i 10 64.28.81.46 2>&1 | cat
Again, no output appeared.
I also tried running this from a tcl (wish) script, using nonblocking
reads and a fileevent. The parent process received nothing at all
from the ping process.
For another test, I ran it under tcsh, using |& rather than 2>&1|,
and the results were identical to the bash results. The stderr
messages just disappeared somewhere and were never seen.
What I'm trying to do, of course, is to have a process fire up a ping
subprocess, and do something sensible with the output. When ping
returns error messages on stderr, it is especially important that the
parent know about it in a timely fashion. But no matter what I try,
ping's stderr never seems to make it through to the parent.
I tried all these on this FreeBSD machine, and they all worked just
like I expected. The more/tee/ping/tcl process sees ping's error
messages as they are produced. But on the several linux systems that
I have access to, they all fail.
Ahy ideas? Can someone make them work?
More information about the Discuss
mailing list