將“watch”與“top”日誌記錄整合直至完成 - 如何?

將“watch”與“top”日誌記錄整合直至完成 - 如何?

我偶然發現了這個連結:「觀察」命令的輸出,直到觀察到特定字串,然後退出

我知道進程的PID。我想使用 top 記錄進程「資源消耗」。

基本上top -p PID -b >> LOGFILE

我希望使用“watch”命令以增量方式運行此操作,例如每 5 秒運行一次

watch -n 5

從獨立/外部程式中,我會將「我們完成了」附加到日誌檔案中。

我希望 watch/top 的日誌記錄在「我們完成」時中斷/退出,因此grep應該評估整個日誌文件,而不僅僅是當前值。

我希望命令以非阻塞形式運行...可能以“ &”結尾

我將 -d 設為 5,所以 top 和 watch 是同時建立的? …

這是我嘗試使用上面連結中建議的“-e”選項,但沒有按預期工作... PID 和 LOGFILE 是適當的值。

watch -n 5 -e "!  top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &

答案1

until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done

如果您想在 pid 不再運行時退出進程的日誌記錄,下面的腳本應該可以工作嗎? (這可以避免兩個行程寫入同一個檔案?)

它需要三個參數:PID、LOGFILE 的位置和日誌條目之間的時間。


#!/bin/bash

if [ $# -lt 3 ]
  then
    echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
    exit 1;
fi

while :
    do 
    if  ps -p $1 > /dev/null ; then
    top -n 1 -b -p $1 >> $2;
    else
    echo "Exited No pid";
    break;
    fi
    sleep $3;   
done

相關內容