请大神帮忙解释这个shell脚本,非常感谢

我正在学习perl编程,下面的脚本对我非常重要,麻烦帮忙,越详细越好,非常感谢!#!/bin/sh#GetmemUsageModifiedUSAGE="Usage:$0p... 我正在学习perl编程,下面的脚本对我非常重要,麻烦帮忙,越详细越好,非常感谢!

#!/bin/sh
#GetmemUsageModified

USAGE="Usage: $0 processName"

if [ $# -ne 1 ]; then
echo $USAGE
exit 1
fi

# In case the monitored process has not yet started
# keep searching until its PID is found
PROCESS_PID=""
while :
do
PROCESS_PID=`/sbin/pidof $1`

if [ "$PROCESS_PID.X" != ".X" ]; then
break
fi
done

LOG_FILE="memusage.csv"

echo "ElapsedTime,VmSize,VmRSS" > $LOG_FILE

ELAPSED_TIME=`date`
PERIOD=2 # seconds

# Monitor memory usage forever until script is killed
while :
do
VM_SIZE=`awk '/VmSize/ {print $2}' < /proc/$PROCESS_PID/status`
if [ "$VM_SIZE.X" = ".X" ]; then
continue
fi
VM_RSS=`awk '/VmRSS/ {print $2}' < /proc/$PROCESS_PID/status`
if [ "$VM_RSS.X" = ".X" ]; then
continue
fi
echo "$ELAPSED_TIME,$VM_SIZE,$VM_RSS" >> $LOG_FILE
sleep $PERIOD
VM_SIZE=""
VM_RSS=""
ELAPSED_TIME=`date +%H:%M:%S:%N`
done
展开
 我来答
行走的标本
2010-08-11 · TA获得超过179个赞
知道答主
回答量:168
采纳率:0%
帮助的人:142万
展开全部
注释忽略
#!/bin/sh
#GetmemUsageModified

USAGE="Usage: $0 processName" //赋值 $0就是脚本名称

if [ $# -ne 1 ]; then
//$#是输入参数个数 也就是说如果脚本执行时的参数如果为1,输出USAGE并以 1状态退出 一般应该是非正常退出 echo $?可以看到这个状态 为0才是正常
echo $USAGE
exit 1
fi

# In case the monitored process has not yet started
# keep searching until its PID is found
PROCESS_PID="" PID常量
while :
// 一个无限循环 while :中":"为空操作 常为真 所以循环只能条件下强制退出
do
PROCESS_PID=`/sbin/pidof $1`
//获取脚本参数进程的进程号

if [ "$PROCESS_PID.X" != ".X" ]; then
break
fi
//进程号存在 跳出循环 进入后面步骤,即查看该进程信息
done

LOG_FILE="memusage.csv" //指定log文件名

echo "ElapsedTime,VmSize,VmRSS" > $LOG_FILE //将信息输入到LOG_FILE中

ELAPSED_TIME=`date` //获取日期
PERIOD=2 # seconds

# Monitor memory usage forever until script is killed
while : //同上循环
do
VM_SIZE=`awk '/VmSize/ {print $2}' < /proc/$PROCESS_PID/status`
//从该进程状态信息中寻找匹配VmSize的信息 并赋给VM_SIZE 这里的$2不是位置参数$2 而是awk中的域2 也就是将vmsize的信息显示出来
if [ "$VM_SIZE.X" = ".X" ]; then
continue
//如果是空的,继续等待 即下一次循环 直到该状态信息存在
fi
VM_RSS=`awk '/VmRSS/ {print $2}' < /proc/$PROCESS_PID/status`
if [ "$VM_RSS.X" = ".X" ]; then
continue
//同上个IF 获取VmRSS信息直到存在
fi
echo "$ELAPSED_TIME,$VM_SIZE,$VM_RSS" >> $LOG_FILE//信息写入LOG文件
sleep $PERIOD //sleep2秒 继续
VM_SIZE="" //信息清空
VM_RSS=""
ELAPSED_TIME=`date +%H:%M:%S:%N`//输出时间
done
整体感觉这个脚本应该是获取参数中进程的信息,并提取需要信息 写入LOG文件记录 留作查看用 没什么难度 随便找找相关命令解释 很好理解的
我也是shell初学者 不到之处 后面大神继续补充
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式