
我偶然發現了這個連結:「觀察」命令的輸出,直到觀察到特定字串,然後退出
我知道進程的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