我有这样的管道:
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