Linux
是否有顯示跟踪點“實時”的命令,其中包括 PID?
我曾嘗試查看 、 和 的文件
perf script
,perf trace
包括trace-cmd
“SEE ALSO”中的命令列表。我可以
sched:sched_process_exec
使用perf trace -a --no-syscalls -e sched:sched_process_exec
. 但是,它只顯示程序名稱(例如ls
)。它不顯示 PID,除非跟踪點具有特定參數。perf script
始終顯示 PID,但不顯示實時輸出;它顯示perf.data
文件的內容。我不需要這是單個命令,例如
btrace
forblktrace
。我很高興使用管道,類似於blktrace -d /dev/sda -o - | blkparse -i -
.(上述兩個命令都顯示 PID :-)。令人沮喪的是
blktrace
,也使用跟踪事件的命令系列可以以與列印記錄的跟踪相同的格式列印實時輸出。我在通用跟踪工具中找不到這樣的功能!)
perf record -a --no-syscalls -e sched:sched_process_exec sh -c read | perf script
(
sh -c read
提供了一種停止此跟踪的方法,只需按 Enter。如果我省略此命令並嘗試使用 ctrl+C 中斷管道,我的輸出將失去,可能是因為它也中斷了perf script
)。但是,由於緩衝,此輸出不是“實時”的。例如,執行上面的命令什麼都沒有顯示,但是按輸入會導致它停止並顯示 exec() 的一行
sh
。blktrace
具有處理輸出到管道的特殊情況程式碼,包括禁用預設的 C stdio 緩衝。嘗試perf record
在unbuffer
命令下執行給出錯誤“不兼容的文件格式”;我認為錯誤來自perf script
.
man perf-report
…
選項
-i, --input=
輸入文件名。(預設: perf.data除非 stdin 是 fifo)