将“watch”与“top”日志记录整合在一起直至完成 - 如何实现?

将“watch”与“top”日志记录整合在一起直至完成 - 如何实现?

我偶然发现了这个链接:“观察”命令的输出,直到观察到特定的字符串,然后退出

我知道进程的 PID。我想使用 top 记录进程的“资源消耗”。

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

我想让它以增量方式运行,比如每 5 秒使用“watch”命令

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

相关内容