1

我想在文件中打印一个进程的cpu使用百分比(top命令)+此top命令获取信息的日期,每0.5秒(每行带有日期+此cpu信息)如果我写一个shell脚本,我会做类似的事情

while [ ! -f $STOP_FILE ]
do
echo "$(date +%s.%N)" >> $REPORT_FILE
top -b -n 1 -p myProcessPID | grep myProcessName | awk -F " " '{print $12 "\t" $9}' >> result.txt
sleep 0.5
done

但是我不能使用顶部的 -n 1 选项来获取 cpu 信息,因为第一次迭代是“从系统启动到现在”,所以我需要其他迭代。

因此,我正在寻找一些命令组合,以使用 top 命令 + 纳秒日期 (date +%s.%N) 获取进程信息(top 命令也会在标题的第一行产生时间,但我想要毫秒)

我正在尝试类似的东西,

echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt

但日期仅在第一次迭代时打印。

有任何想法吗?

对不起,如果我对这个问题不是很准确,我对这个脚本很陌生,在这里写..

4

1 回答 1

3

您可以通过管道输出topthroughawkawk运行来实现此目的date。例如:

top -d 0.5 -n 100 -p myProcessPID \
   | awk '/myProcessName/ { system("date +%s"); print $0 }'

awk您可以通过调整程序对输出格式进行任意控制。另请注意,您不需要单独的grep,因为awk的内部模式匹配非常好。

于 2016-10-11T16:26:31.790 回答