我正在尝试qemu-kvm
使用 bash 脚本监视一些进程并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
限制吗??