我偶然发现了这个链接:“观察”命令的输出,直到观察到特定的字符串,然后退出
我知道进程的 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