Bash:如何logging一个bash脚本执行期间最高的内存/ CPU消耗?

我有一个bash脚本中的函数,它执行一个叫做runBatch的长进程。 基本上runBatch需要一个文件作为参数,并将内容加载到数据库。 (runBatch只是加载文件内容的数据库命令的包装函数)

我的函数有一个循环,看起来像下面,我正在logging开始时间和过程的时间stream逝的variables。

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正在运行时 ,我将如何logging最高的内存/ CPU使用情况,以及时间等?

任何帮助赞赏。

编辑:我设法做到这一点。 我在后台运行这个脚本的脚本中添加了一个包装脚本。 我把它的PID传给$! 到包装脚本中的另一个脚本,每秒监视进程CPU和内存使用情况。 当PID不再活跃时,我将所有内容编译成一个html页面。 欢呼的指针。

你应该能够使用$!获得进程的PID,

 runBatch $batchFile & myPID=$! 

然后你可以运行一个top -b -p $myPID来打印出CPU的滴答概要。

记忆:

 cat /proc/meminfo 

接下来grep任何你想要的,

Cpu,它比较复杂 – / proc / stat扩展

平均负载:

 cat /proc/loadavg 

对于时间“runBatch”使用

 time runBatch 

喜欢

 time sleep 10 

一旦你得到了你的进程的PID(例如像这里回答的那样),你可以使用proc(5)文件系统(例如watch(1) & cat(1)或者grep(1) )

  watch cat /proc/$myPID/stat 

(或使用/proc/$myPID/status/proc/$myPID/statm ,或者/proc/$myPID/maps作为地址空间等)

顺便说一句,要运行批处理作业,你应该考虑批处理 (你可以看看crontab(5)定期运行的东西)