![来自正在运行的进程的 strace 调用并对它们进行计数](https://linux22.com/image/187223/%E6%9D%A5%E8%87%AA%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%9A%84%20strace%20%E8%B0%83%E7%94%A8%E5%B9%B6%E5%AF%B9%E5%AE%83%E4%BB%AC%E8%BF%9B%E8%A1%8C%E8%AE%A1%E6%95%B0.png)
我有一个将运行很多个小时的后台进程。我想write
实时追踪和统计通话次数。
sudo strace -p27861 -s50 -e write
它给了我这样的行:
write(1, "...........", 70) = 70
我想要的是获得这样的调用的实时计数:
write(1, "...........", 70) = 70, 1
write(1, "...........", 560) = 560, 2
write(1, "...........", 103) = 103, 3
或仅计数:
1
2
3
答案1
您可以通过对输出进行后处理来做到这一点,例如使用 GNU AWK:
strace -q -p27861 -s50 -e write -e signal=none 2>&1 | gawk '{ print $0 ", " ++i }'
(这准确地给出了您所追求的实时输出),或者cat -n
按照建议用户414777:
strace -q -p27861 -s50 -e write -e signal=none 2>&1 | cat -n
-q
抑制“正在附加”消息,并-e signal=none
抑制信号迹线。