簡體   English   中英

如何在linux的文件中捕獲top命令的output?

[英]How to capture the output of a top command in a file in linux?

我想將特定“top”命令的 output 寫入文件。 我做了一些谷歌搜索,發現可以使用以下命令來完成。

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

其中 -n 指定迭代次數,-b 用於批處理模式。 如果讓 top 進行 10 次迭代,這將非常有效。 但是如果我用 Ctrl-C 中斷命令的運行,output 文件似乎是空的。

我不會事先知道迭代次數,所以我需要手動打破它。 如何在不指定迭代的情況下在文件中捕獲頂部的 output?

我試圖准確使用的命令是

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

並隨時打破它。 但它不起作用。

編輯:為了給這個問題提供更多背景信息,我有一個 Java 代碼,它調用一個帶有輸入文件的工具。 正如該工具將文件作為輸入並運行一段時間,然后獲取下一個文件,依此類推。 我有一組 100,000 個文件需要提供給該工具。 所以現在我正在嘗試監視該特定工具(它在 Linux 中作為進程運行)。 我無法將整個“頂部”數據捕獲為文件,因為不需要的數據太大。 如何僅捕獲該進程的系統統計信息並使用 top 將其寫入文件?

對我來說top -b > test.txt將存儲來自top ok的所有輸出,即使我用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上使用的1-liner:

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

干杯。

由於控制保留在CLI中,CTRL + C不是理想的解決方案。 您可以使用以下命令將頂部輸出轉儲到文件:

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

我有同樣的問題...

這是我的路線:

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

它會創建myFile.txt但是當我按Ctrl + C它時它會為空。 因此,在我開始執行我的頂級命令后,我開始了一個SECOND頂級流程。 當我找到第一個頂部的PID(進行了一些試驗和錯誤),並且我通過第二個頂部殺死它時,第一個頂部按預期寫入文件。

希望有所幫助!

如果你想在后台運行top命令(只是不擔心注銷/睡眠等) - 你可以使用nohup或批處理作業或cron或screen。

使用nohup(代表:No Hang Up):

假設您將top命令保存在名為top-exec.sh的文件中, 其中包含以下內容:

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

您可以替換您感興趣的任何進程的top命令。然后,您可以使用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
  • 您可以使用top命令從中提取任何內容,使用此腳本將其存儲到文件中。
  • -b:批處理模式操作在批處理模式啟動,這對於將輸出從頂部發送到其他程序或文件非常有用。 在此模式下, top將不接受輸入並運行,直到迭代限制您使用-n命令行選項設置或直到被殺死。
  • -n number ,此選項指定在結束之前應生成的最大迭代次數或幀數。 我在這里用過-n 1
  • man top以獲取更多細節
  • tee -a使輸出在控制台上可見,並將輸出存儲到文件中。 -a選項將輸出附加到文件。
  • 在這里,我給出了1秒的間隔。 你可以提到任何其他間隔。

解釋-b和-n:manpages的來源

man top

Kruthika

正如@Thor在評論中指出的那樣,你只需要確保grep不是任意緩沖,而是使用--line-buffered選項進行每行 --line-buffered

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

如果沒有grep,將top的輸出重定向到文件就可以正常工作,包括中斷。

將 -n 參數設置為 1 它告訴 top 在退出之前它將產生多少幀。

top -b -n 1 > ~/mytopview.txt

甚至

myvar=`top -b -n 1`
echo $myvar

top命令,我們可以看到所有進程的PID(進程ID)。 要僅為一個進程打印頂部輸出,請使用以下命令:

$ top –p PID

要將任何進程的top命令保存到文件,請使用以下命令:

top -p $PROCESS_ID -b  > top.log

其中>將標准輸出重定向到文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM