我正在尝试执行以下操作:
获取 的输出free -mo
,取第二行并每 30 秒将其记录到文件中。
当我跑
$free -mo -s 30
它每 30 秒运行一次并显示输出。
但是当我跑步时
$ free -mo -s 30 | head -2 | tail -1
它只运行一次。我无法弄清楚出了什么问题。
free Manual 说 free -s 30 每 30 秒运行一次命令。
我正在尝试执行以下操作:
获取 的输出free -mo
,取第二行并每 30 秒将其记录到文件中。
当我跑
$free -mo -s 30
它每 30 秒运行一次并显示输出。
但是当我跑步时
$ free -mo -s 30 | head -2 | tail -1
它只运行一次。我无法弄清楚出了什么问题。
free Manual 说 free -s 30 每 30 秒运行一次命令。
head -2
只返回前 2 行输出然后退出。tail -1
返回最后一行,然后退出。当任何程序在管道中退出时,它会杀死整个管道,因此在完成free
时停止。head
tail
采用free -mo -s 30 &> test.txt &
这将获取free
命令的所有输出并将其输出到 test.txt 并在后台运行它。
尝试
free -mos 30 | grep 'Mem:' >yourlog.txt
(但您可能会更好地考虑使用类似 sar 来捕获此类数据 - 它还可以报告许多其他内容 - 只需推迟过滤/提取,直到您从数据中生成报告)。
威尔·哈通是对的。而是这样做:
虽然是真的;做免费-mo | 头-2 | 尾巴-1;睡30;完毕
感谢您的回答。我试图监视进程的内存利用率。我想我明白了。
START_TIME=$(date);
cd /data;
INPUT_DATA=$1;
CODE_FILE=$2;
TIMES=$3;
echo "$START_TIME" > "$CODE_FILE.freeMemory_$TIMES.log";
free -mo -s 30 >> "$CODE_FILE.freeMemory_$TIMES.log" &
freepid=$!;
sleep 1m;
#echo "PID generated for free command -- $freepid";
START_TIME=$(date);
i=0;
while [ $i -le $TIMES ]
do
sh runCode.sh $CODE_FILE "output.csv" $INPUT_DATA;
i=`expr $i + 1`
done
END_TIME=$(date);
echo "process started at $START_TIME and ended at $END_TIME " ;
sleep 1m;
kill -9 $freepid;
END_TIME=$(date);
echo "$END_TIME" >> "$CODE_FILE.freeMemory_$TIMES.log";