将 strace 重定向到文件

将 strace 重定向到文件

正在尝试跟踪 apache2。这些是我正在尝试运行的命令。

ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace >> trace.txt

我试过

(ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace ) >> trace.txt

或者

ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace | xargs >> trace.txt

答案1

不能使用 -o 标志有什么特殊原因吗?

ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt

此外,您应该使用一些正则表达式技巧来避免在进程列表中捕获 grep 进程。

ps auxw | grep 'sbin/[a]pache' ....

还要记住,在 Apache 的具体情况下,

  1. Apache (通常) 是多进程的,您想要获取父进程还是子进程之一?我会将 '-f' 标志添加到 strace,它 (除其他外) 会在输出中插入 PID。
  2. 您可以从 PID 文件中获取主父进程的进程 ID。

    例如 strace -o /tmp//trace.txt -f $(< /path/to/apache.pid)

所以,这就是你要问的问题。。但是你想做什么?启动时调试?跟踪处理请求的子进程?还要查看 apache 的 -X 标志。

答案2

一般来说,strace“可以重定向到一个文件”,但它会将其输出写入 stderr(将其与程序的 stderr 混合),因此它就像

strace progname 2>my_strace_output

如果您希望“所有输出”都转到一个文件:

strace progname 1>my_strace_output 2>&1

如果你想能够“grep”它:

strace progname 2>&1 | grep ...

但请注意,如果您使用 grep 并将其发送到文件,则会发生大量缓冲:https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard

答案3

 ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace 2>> trace.txt

答案4

您还可以通过以下方式将标准输出定向到文件:

(time /bin/ls) &> /tmp/time.txt

或者调试 php 脚本:

(strace php /path/to/www/script.php) &> strace_output.txt

相关内容