【问题标题】:Using bash and watch to monitor qemu-kvm使用 bash 和 watch 监控 qemu-kvm
【发布时间】:2013-12-19 15:39:54
【问题描述】:

我正在尝试使用 bash 脚本和 watch 监视一些 qemu-kvm 进程,以显示一些详细信息,例如内存/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 是否受到某种限制??

【问题讨论】:

标签: bash qemu watch lsof


【解决方案1】:

我尝试了与您相同的过程;就我而言,唯一的区别是需要 sudo。有了它,它就起作用了。同样的问题?

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

watch -n1 sh test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多