我在bash脚本中有一个函数,该函数执行一个名为runBatch的长进程。基本上,runBatch将文件作为参数并将内容加载到db中。 (runBatch只是用于加载文件内容的数据库命令的包装函数)

我的函数有一个类似于下图的循环,当前正在记录变量的开始时间和经过时间。

for batchFile in `ls $batchFilesDir`
do
     echo "Batch file is $batchFile"
     START_TIME=$(($(date +%s%N)/1000000))
     runBatch $batchFile
     ELAPSED_TIME=$(($(($(date +%s%N)/1000000))-START_TIME))
     IN_SECONDS=$(awk "BEGIN {printf \"%.2f\",${ELAPSED_TIME}/1000}")
done

然后,我将有关每个批次的一些信息(例如时间等)写入到正在生成的html页面中的表中。

如何在runBatch运行时记录最高的内存/CPU使用率以及时间等信息?

任何帮助表示赞赏。

编辑:我设法做到这一点。我在该脚本周围添加了包装器脚本,该脚本在后台运行该脚本。我用$传递它的PID!到包装脚本中的另一个脚本,该脚本每秒监视一次CPU和内存使用情况。当PID不再存在时,我将所有内容最终编译为html页面。为指针欢呼。

最佳答案

您应该可以使用$!获得过程的PID。

runBatch $batchFile &
myPID=$!

然后可以运行top -b -p $myPID以打印出CPU的滴答滴答摘要。

10-02 07:44