Centos

輸出重定向不適用於頂部管道到 grep

  • March 28, 2019

當我在 Linux 中執行此命令時:

$ top -b -d 20 | grep "load average" -A 20 > top.log

top.log 始終為空。

但是當我執行這個命令時:

$ top -b -d 20 | grep "load average" -A 20 | tee top.log

然後 top.log 有內容。

如果我不想使用tee(因為我不想將輸出顯示到控制台上),如何更正第一個命令以便更新 top.log?

我的機器使用 CentOS Linux 7 (Core)。

您應該使用--line-buffered選項grep(因為您的問題被標記為“centos”,所以您肯定在使用 GNU grep)。

預設情況下,grep僅當輸出為終端時才使用行緩衝(就像 stdio 函式:printf、puts 等)。該--line-buffered選項是壓倒一切的。GNU coreutils 也有一個 stdbuf(1) 包裝器,它應該適用於任何使用 stdio 的動態連結程序。

您可以cat /proc/loadavg間隔使用。為什麼要拉出來top?它用於主動監控(主要是),並且總是比快速讀取loadavg. 對於流程列表,只需使用, 並使用標誌ps進行排序。—sort例如

( while true ; do cat /proc/loadavg ; ps -aux | sort -nrk 3,3 | head -n 20 ; sleep 3 ; done ; ) | pipe ...

或者

( while true ; do cat /proc/loadavg ; ps -Ao user,uid,pid,comm,pcpu,tty —sort=-pcpu —no-headers | head -n 20 ; sleep 3 ; done ; ) | pipe ...

引用自:https://unix.stackexchange.com/questions/508935