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

时间:2012-07-30 21:16:32

标签: linux file

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

top -n 10 -b > top-output.txt

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

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

我试图准确使用的命令是

top -b | grep init > top-output.txt

随时随地打破它。但它不起作用。

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

10 个答案:

答案 0 :(得分:35)

对我来说,

top -b > test.txt会存储top的所有输出,即使我将其与ctrl-c分开也是如此。我建议先转储,然后grep生成的文件。

答案 1 :(得分:8)

如何使用while循环和-n 1

while sleep 3; do 
  top -b -n1 | grep init > top-output.txt
done

答案 2 :(得分:4)

看起来输出在所有迭代完成之前都没有写入文件。你可以用这样的外部循环包装来解决这个问题:

touch top-output.txt
while true; do
    top -b | grep init >> top-output.txt
done

答案 3 :(得分:1)

这是我喜欢在我的Mac上使用的1-liner:

top -o -pid -l 1 | grep "some regexp"

干杯。

答案 4 :(得分:1)

由于控制权保留在CLI中,因此CTRL + C不是理想的解决方案。您可以使用以下命令将顶部输出转储到文件:

[file path]:11.18.77.14.152392.16.APP_Ret,04/10/2018 17:21:07.592,,start,ani,1234567890

答案 5 :(得分:0)

我遇到了同样的问题...

这是我的专栏:

top -b -u myUser | grep -v Prog.sh | grep Prog > myFile.txt

它会创建myFile.txt但是当我按Ctrl + C它时它会为空。因此,在我开始执行我的顶级命令后,我开始了一个SECOND顶级流程。当我找到第一个顶部的PID(进行了一些试验和错误),并且我通过第二个顶部杀死它时,第一个顶部按预期写入文件。

希望有所帮助!

答案 6 :(得分:0)

如果你想在后台运行top命令(只是不担心注销/睡眠等) - 你可以使用nohup或批处理作业或cron或screen。

使用nohup(代表:不挂机):

假设您将top命令保存在名为 top-exec.sh 的文件中,并包含以下内容:

 top -p <PID> -b > /tmp/top.log

您可以将top命令替换为您感兴趣的任何进程。 然后,您可以使用nohup执行 top-exec.sh ,如下所示:

$> nohup top-exec.sh &

这会将top命令的所有输出重定向到名为“top.log”的文件

答案 7 :(得分:0)

解决了这个问题。即使您按Ctrl + c 也可以工作。当我想记录Cpu%时,即使我遇到了同样的问题。 执行这个shell脚本:

#!/bin/sh
while true; do
    echo "$(top -b -n 1 | grep init)"  | tee -a top-output.log
    sleep 1
done
  • 您可以使用top命令从中提取任何内容,使用此脚本将其存储到文件中。
  • -b:批处理模式操作         在批处理模式下启动,这对于将输出从顶部发送到其他程序或用途非常有用         到一个文件。在此模式下, top将不接受输入并运行,直到您设置的迭代限制为止         使用-n命令行选项或直到被杀死。
  • -n number ,此选项指定在结束前应生成的最大迭代次数或帧数。在这里,我使用了 -n 1
  • man top了解更多详情
  • tee -a使输出在控制台上可见,并将输出存储到文件中。 -a选项将输出附加到文件。
  • 在这里,我给出了1秒的间隔。你可以提到任何其他间隔。

解释-b和-n:manpages的来源

man top

Kruthika

答案 8 :(得分:0)

正如@Thor在评论中指出的那样,您只需确保grep不是任意缓冲,而是使用--line-buffered选项每行

top -bn 10 | grep 'init' --line-buffered | tee top-output.txt

没有grep-ing,将top的输出重定向到文件就可以了,包括中断。

答案 9 :(得分:-1)

top 命令,我们可以看到所有进程及其PID(进程ID)。 要仅为一个进程打印顶部输出,请使用以下命令:

$ top –p PID

要将任何进程的top命令保存到文件,请使用以下命令:

top -p $PROCESS_ID -b  > top.log

其中&gt;将标准输出重定向到文件。