grep on strace只与stderr一起工作到stdout

1 linux bash grep pipe strace

当我做:

sudo strace -p PID 2>&1 | grep -v "recvmsg"
Run Code Online (Sandbox Code Playgroud)

grep匹配它应该匹配的行,但是当我这样做时:

sudo strace -p PID|grep -v "recvmsg"
Run Code Online (Sandbox Code Playgroud)

它仍然显示所有呼叫.这是为什么?

Joh*_*nck 7

这是因为strace将其所有输出写入stderr,而不是stdout.并且管道重定向stdout,而不是stderr.所以你需要在管道到grep之前将strader的stderr重定向到stdout.

  • 是否有理由不使用标准输出作为其标准输出? (2认同)
  • 是的:一些调试工具使用stderr,因为他们认为你的程序可能会将自己的东西写入stdout.这可能会更容易将strace的输出与您正在跟踪的输出分开...或者它可能只是令人讨厌.:) (2认同)