我想在文件中打印进程的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
但我不能在top中使用-n 1选项来获取cpu信息,因为第一次迭代是"from system boot until now"所以我需要其他迭代。
因此,我正在寻找一些命令组合来获取顶级命令的过程信息+一个纳秒的日期(日期+%s。%N)(顶部命令也会在标题的第一行中产生一个时间) ,但我想要毫秒)
我正在尝试类似的事情,
echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt
但日期仅在第一次迭代时打印。
有什么想法吗?
对不起,如果我对这个问题不是很准确,我是这个脚本的新手并在这里写...
答案 0 :(得分:2)
您可以通过管道top
到awk
的输出,并让awk
运行date
来实现此目的。例如:
top -d 0.5 -n 100 -p myProcessPID \
| awk '/myProcessName/ { system("date +%s"); print $0 }'
您可以通过调整awk
程序对输出格式进行任意控制。另请注意,您不需要单独的grep
,因为awk
的内部模式匹配非常适合。