如何将 top 命令的输出(针对即将停止的特定进程)捕获到一个文件中

3

我正在使用 top 监控一个进程 MYPID=18686

top -b -n 1000 -d 5 -p $MYPID | tail -1 > log.txt

当进程死亡时,输出文件为空。 我的最终目标只是记录该进程的生命周期内的CPU使用情况。指定-n 1000 -d 5是一种廉价的解决方法,它在预期的进程生命周期内运行top命令。 tail -1 是为了消除不断记录top表头的影响。 这个问题的答案很有帮助,但并不是一个解决方案。如何在Linux中将top命令的输出捕获到文件中?
2个回答

3

tail -1 不能像 top 那样产生每个屏幕输出的最后一行。它只会产生所有行的最后一行。

尝试:

top -b -n 1000 -d 5 -p "$MYPID" | grep "$MYPID" > log.txt

这将会把所有提及到PID的行收集到log.txt文件中,但不包括头部(假设PID没有出现在头部)。
注意,grep通常是有缓冲的。这意味着,如果你在运行过程中查看log.txt文件,它可能已经过时了。使用GNU grep,你可以通过--line-buffered选项保持log.txt文件实时更新。
top -b -n 1000 -d 5 -p "$MYPID" | grep --line-buffered "$MYPID" > log.txt

0

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

  • -b:批处理操作模式
  • -n:迭代次数
  • -d:延迟(每次迭代之间的中断;如果只需要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 &


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接