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

cod*_*ter 2 linux strace trace

我有一个这样的管道:

command1 | command2
Run Code Online (Sandbox Code Playgroud)

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

小智 7

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

strace -f sh -c 'command1 | command2'
Run Code Online (Sandbox Code Playgroud)

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

strace -ff -o trace sh -c 'command1 | command2'
Run Code Online (Sandbox Code Playgroud)

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