如何在linux中的文件中捕获top命令的输出?

Pra*_*dep 31 linux file

我想将特定'top'命令的输出写入文件.我做了一些谷歌搜索,发现可以使用以下命令完成.

top -n 10 -b > top-output.txt
Run Code Online (Sandbox Code Playgroud)

其中-n表示迭代​​次数,-b表示批处理模式.如果让10次迭代顶部,这非常有效.但是如果我用Ctrl-C打破命令的运行,输出文件似乎是空的.

我不知道手前的迭代次数,所以我需要手动打破它.如何在不指定迭代的情况下捕获文件顶部的输出?

我试图准确使用的命令是

top -b | grep init > top-output.txt
Run Code Online (Sandbox Code Playgroud)

并随时打破它.但它不起作用.

编辑:为了给问题提供更多的上下文,我有一个Java代码,它调用一个带有输入文件的工具.由于该工具将文件作为输入并运行一段时间,然后获取下一个文件,依此类推.我有一组100,000个文件需要输入到工具中.所以现在我正在尝试监视该特定工具(它在linux中作为一个进程运行).我无法捕获整个'top'数据作为文件,因为对于不需要的数据来说太大了.如何捕获该进程的系统统计信息并使用top将其写入文件?

Mar*_*nen 35

对我来说top -b > test.txt,top即使我打破它,也会存储好的所有输出ctrl-c.我建议先转储,然后grep生成文件.

  • 请注意,`-b`标志是顶级GNU版本的特定标志.这在大多数Linux系统上都很好,但可能无法移植到基于busybox的系统或其他unix. (3认同)

Tho*_*hor 8

如何使用while循环和-n 1:

while sleep 3; do 
  top -b -n1 | grep init > top-output.txt
done
Run Code Online (Sandbox Code Playgroud)


CIG*_*Guy 5

在所有迭代完成之前,输出似乎不会写入文件。您可以通过用这样的外部循环包装来解决这个问题:

touch top-output.txt
while true; do
    top -b | grep init >> top-output.txt
done
Run Code Online (Sandbox Code Playgroud)