如何捕获文件中top命令(对于将要死的特定进程)的输出

时间:2018-03-17 05:41:30

标签: linux bash logging

我有一个我正在监控的流程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?

2 个答案:

答案 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)

您可以使用以下选项将输出保存在文件中

  • -b:批量操作模式
  • -n:迭代次数
  • -d:delay(每次迭代之间的中断;如果需要1次迭代则不需要这样)
  • -f:输出文件(仅在某些版本中可用,最好不要再使用它)

现在考虑到你的目的,我们可以执行以下命令将输出保存在文件中:

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 &