是否有命令可以“实时”显示跟踪点,其中包括 PID?

是否有命令可以“实时”显示跟踪点,其中包括 PID?

我尝试查看perf scriptperf trace和的文档trace-cmd,包括“另请参见”中的命令列表。

我可以sched:sched_process_exec使用 来追踪例如“实时” perf trace -a --no-syscalls -e sched:sched_process_exec。不过它只是展示了过程姓名(例如ls)。它不显示 PID,除非跟踪点具有特定的参数。 perf script始终显示PID,但不显示实时输出;它显示文件的内容perf.data

我不需要将其作为单个命令,例如btracefor blktrace。我很高兴使用类似于blktrace -d /dev/sda -o - | blkparse -i -.

(以上两个命令都显示 PID :-)。令人沮丧的是,看到blktrace也使用跟踪事件的命令系列可以以与打印记录的跟踪相同的格式打印实时输出。我在通用追踪工具中找不到如此强大的功能!)

答案1

perf record -a --no-syscalls -e sched:sched_process_exec sh -c read | perf script

sh -c read提供了一种停止此跟踪的方法,只需按 Enter 键即可。如果我省略此命令并尝试使用 ctrl+C 中断管道,我的输出将丢失,可能是因为它也会中断perf script)。

然而,由于缓冲,该输出不是“实时”的。例如,运行上面的命令没有显示任何内容,但是按 Enter 键会导致它停止并显示 exec() of 的一行shblktrace特殊情况代码处理管道的输出,包括禁用默认的 C stdio 缓冲。尝试在命令perf record下运行unbuffer给出错误“文件格式不兼容”;我认为错误来自perf script.


man perf-report

...

选项

-i, --input=输入文件名。 (默认值:perf.data除非 stdin 是 fifo

相关内容