Bash free命令停止工作

时间:2012-12-31 15:03:49

标签: linux bash tail free-command

我正在尝试做以下事情:

获取free -mo的输出,取第二行并每隔30秒将其记录到一个文件中。

当我跑步时

$free -mo -s 30 

它每30秒运行并显示一次输出。

但是当我跑步时

$ free -mo -s 30 | head -2 | tail -1

它只运行一次。我无法弄清楚出了什么问题。

免费手册说free -s 30每隔30秒运行一次命令。

5 个答案:

答案 0 :(得分:6)

head -2仅返回前2行输出然后退出。 tail -1返回最后一行,然后退出。当任何程序在管道中退出时,它会终止整个管道,因此freehead完成时会tail停止。

答案 1 :(得分:0)

使用free -mo -s 30 &> test.txt &

这将获取free命令的所有输出并将其输出到test.txt并在后台运行。

答案 2 :(得分:0)

尝试

free -mos 30 | grep 'Mem:' >yourlog.txt

(但你可能会更好地考虑类似sar之类的东西来捕获这类数据 - 它还可以报告很多其他事情 - 只需推迟过滤/提取,直到你从数据中生成一个resport)。

答案 3 :(得分:0)

Will Hartung是对的。而是这样做:

  

虽然如此;做自由-mo |头-2 |尾巴-1;睡30;完成

答案 4 :(得分:0)

感谢您的回答。我试图监视进程的内存利用率。我想我明白了。

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";