我想在Windows和Linux上都能做到这一点。我知道可以通过获取sysinfo和使用与硬件标识符相关的拇指规则来实现。
我想知道是否有更基本的方法,比如查看内存地址/发出中断等。
顺便说一句,我正在英特尔硬件上做这件事,我使用的虚拟化软件是Vmware工作站和Windows HyperV。

最佳答案

下面是一个更有用的命令:

$ lscpu | grep -E 'Hypervisor vendor|Virtualization type'
Hypervisor vendor:     KVM
Virtualization type:   full

其他命令的输出示例:
$ sudo virt-what
kvm

$ dmesg | grep -i virtual
[    0.000000] Booting paravirtualized kernel on KVM
[    0.029160] CPU0: Intel QEMU Virtual CPU version 1.0 stepping 03

$ sudo dmidecode | egrep -i 'manufacturer|product|vendor|domU'
    Vendor: Bochs
    Manufacturer: Bochs
    Product Name: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs
    Manufacturer: Bochs

关于linux - 如何以编程方式知道我是否在VM中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15374154/

10-11 08:49