我正在尝试跟踪 apache2。这些是我试图运行的命令。
ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace >> trace.txt
Run Code Online (Sandbox Code Playgroud)
我试过
(ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace ) >> trace.txt
Run Code Online (Sandbox Code Playgroud)
或者
ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace | xargs >> trace.txt
Run Code Online (Sandbox Code Playgroud)
Ric*_*lka 22
您不能使用 -o 标志的任何特殊原因?
ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用一些正则表达式技巧来避免在进程列表中捕获您的 grep 进程。
ps auxw | grep 'sbin/[a]pache' ....
Run Code Online (Sandbox Code Playgroud)
还要记住,在 apache 的特定情况下,
您可以从 PID 文件中获取主父进程的进程 ID。
例如 strace -o /tmp//trace.txt -f $(< /path/to/apache.pid)
所以,这就是你要问的问题......但是你想做什么?开机调试?strace 服务于请求的子进程?另请查看 apache 的 -X 标志。
一般来说,strace“可以重定向到一个文件”,但它会将其输出写入 stderr(将其与程序的 stderr 混合),所以它就像
strace progname 2>my_strace_output
Run Code Online (Sandbox Code Playgroud)
如果您希望“所有输出”转到文件:
strace progname 1>my_strace_output 2>&1
Run Code Online (Sandbox Code Playgroud)
如果你想能够“grep”它:
strace progname 2>&1 | grep ...
Run Code Online (Sandbox Code Playgroud)
但是请注意,如果您使用 grep 并将其发送到文件中会发生大量缓冲:https : //unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard