我有一个我正在监控的流程MYPID=18686
。
top -b -n 1000 -d 5 -p $MYPID | tail -1 > log.txt
当进程终止时,输出文件为空。
我的最终目标是记录该进程生命周期内的CPU使用情况。指定-n 1000 -d 5
是一种廉价的解决方法,可以在流程的预期生命周期内运行。 tail -1
旨在消除不断记录的顶部标题。
这个问题的答案很有帮助,但不是解决方案。 How to capture the output of a top command in a file in linux?
答案 0 :(得分:3)
tail -1
不会生成top
生成的每个输出屏幕的最后一行。它只产生所有行的最后一行。
尝试:
top -b -n 1000 -d 5 -p "$MYPID" | grep "$MYPID" > log.txt
这将收集log.txt
提及PID但没有标题的所有行(假设PID没有出现在标题上)。
请注意,grep
通常是缓冲的。这意味着,如果您在运行期间检查log.txt
,它可能已过期。使用GNU grep
,您可以使log.txt
选项与--line-buffered
保持同步:
top -b -n 1000 -d 5 -p "$MYPID" | grep --line-buffered "$MYPID" > log.txt
答案 1 :(得分:0)
您可以使用以下选项将输出保存在文件中
现在考虑到你的目的,我们可以执行以下命令将输出保存在文件中:
top -b -n 1000 -d 5 -p $MYPID | grep -i "Cpu(s)" | head -c21 | cut -d ' ' -f3| cut -d '%' -f1 > state.log
如果您希望在后台模式下运行命令,而不会被杀,当您注销会话时,您可以尝试以下操作:
nohup top-pid.sh &