有没有办法使用 strace 来跟踪命令管道的不同部分?

有没有办法使用 strace 来跟踪命令管道的不同部分?

我有这样的管道:

command1 | command2

有没有办法同时跟踪这两个命令?

答案1

您可以通过以下方式获取单个跟踪:

strace -f sh -c 'command1 | command2'

“-f”将“跟随”fork 调用到子进程(因此您还将获得由 command1 或 command2 调用的任何子命令,这可能是您想要的,也可能不是您想要的。)此外,您还将获得过程的痕迹sh也。如果您希望每个进程输出在单独的文件中,“-ff”选项将跟踪子进程并将 PID 附加到“-o”文件名,如下所示:

strace -ff -o trace sh -c 'command1 | command2'

这应该trace.<PID>为每个分叉子项创建单独的文件。

答案2

是的,放在strace管道中的每个命令之前,并将 stderr 重定向到不同的文件以方便分析:

strace -o trace1.out command1 | strace -o trace2.out command2

相关内容