我想将特定'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将其写入文件?
答案 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)
[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
man top
了解更多详情解释-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;将标准输出重定向到文件。