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