如何在Linux中的文件中捕获顶部命令的输出?

我想写一个特定的“顶”命令的输出到一个文件。 我做了一些谷歌search,并发现可以通过使用以下命令完成。

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

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

我不会在手之前知道迭代次数,所以我需要手动分解它。 我怎样才能捕获文件顶部的输出没有指定迭代?

我试图正确使用的命令是

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

当我想要的时候打破它。 但它不起作用。

编辑:为了给这个问题更多的上下文,我有一个Java代码调用一个input文件的工具。 如在工具中将文件作为input并运行一段时间,然后取下一个文件等等。 我有一组需要被提供给这个工具的100,000个文件。 所以现在我正在试图监视这个特定的工具(它在Linux中作为一个进程运行)。 我无法捕获整个“顶级”的数据,因为这个文件太大而且有不必要的数据。如何捕获只有该进程的系统统计信息并使用top将其写入文件?

Solutions Collecting From Web of "如何在Linux中的文件中捕获顶部命令的输出?"

对我来说, top -b > test.txt将存储从top所有输出,即使我用ctrl-c分解它。 我建议你先转储,然后grep生成的文件。

如何使用while循环和-n 1

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

它看起来像输出没有写入文件,直到所有的迭代完成。 你可以通过像这样的外部循环来解决这个问题:

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

这里是我喜欢在我的Mac上使用的单线:

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

干杯。

我有同样的问题…

这是我的路线:

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

这将创建myFile.txt,但它会是空的,当我按Ctrl + C的。 所以在我开始我的最高命令之后,我开始了第二个顶级程序。 当我发现第一个顶端的PID(经历了一些试验和错误),并且通过第二个顶端杀死了它时,第一个顶端按预期写入了文件。

希望有所帮助!

如果你希望在后台运行顶级命令(只是不用担心注销/睡眠等) – 你可以使用nohup或批处理作业或cron或屏幕。

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

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

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

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

 $> nohup top-exec.sh & 

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

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

 #!/bin/sh while true; do echo "$(top -b -n 1 | grep init)" | tee -a top-output.log sleep 1 done 
  • 你可以grep任何你想从顶部的命令提取出来的,使用这个脚本来存储它到一个文件。
  • -b:批处理模式操作在批处理模式启动顶部,这对从顶部向其他程序或文件发送输出可能有用。 在这种模式下, 顶层将不会接受输入,直到迭代限制你已经用-n命令行选项设置,或者直到死亡。
  • -n数字 ,这个选项指定最大的迭代次数或者帧数,在结束之前,顶部应该产生。 这里我用了-n 1
  • man top的更多细节
  • tee -a使输出在控制台上可见,并将输出存储到文件中。 -a选项将输出附加到文件中。
  • 在这里,我给了一个1秒的时间间隔。 您可以提及任何其他时间间隔。

来源解释-b和-n:手册页

 man top 

Kruthika

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

 $ top –p PID 

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

 top -p $PROCESS_ID -b > top.log 

其中>将标准输出重定向到文件。