使用bash并观察监视qemu-kvm

时间:2013-12-03 14:17:09

标签: bash qemu watch lsof

我正在尝试使用bash脚本和qemu-kvm来监控某些watch进程,以显示内存/ CPU使用,资源,端口等几个细节。在我尝试获取qemu-kvm正在使用的IMG文件之前,一切都很顺利。

最初我以为我可以从正在运行的进程cmd中获取该信息:

ps -p PID -o cmd | tail -1
qemu-kvm -name TEST -drive file=/img/test.qcow2,if=ide,media=disk,cache=none -daemonize

因此经过大量测试后,我编写了这个小脚本只是为了综合问题:

#!/bin/bash
lsof -p PID | grep '/img/' | awk {'print $9'}

当我从命令行执行它时,此脚本的输出看起来完全正常:

bash testscript
/img/test.qcow2

当我尝试与watch一起运行脚本时出现问题:

watch -n1 "bash test-script"watch -n1 ./test-script

输出只是空的......

为什么我没有得到任何结果?如果有人能帮助我理解这一点,我会很高兴。

编辑:我找到了另一种解决方案。我现在从解析procfs与一些数组获取信息,以找到IMG信息:

OIFS=$IFS;
IFS='-';  
Array=($(cat /proc/PID/cmdline))
    for ((i=0; i<${#Array[@]}; ++i))
        do
        if [[ "${Array[$i]}" == *drive* ]]; then
            image=${Array[$i]}
            echo $image
        fi
    done
IFS=$OIFS;

这与watch结合得很好,但我仍然想知道另一种方法的问题是什么。是lsof以某种方式限制吗?

1 个答案:

答案 0 :(得分:0)

我尝试了和你一样的过程;我的唯一区别是需要sudo。有了它,它工作。同样的问题?

#!/bin/sh
sudo lsof | grep .B.disk.img

watch -n1 sh test