我正在尝试在虚拟机中运行一个简单的单文件 C 程序。其实就是fork bomb c程序:
#include <stdio.h>
#include <sys/types.h>
int main()
{
while(1)
{
fork();
}
return 0;
}
我想这样做是为了检查这个虚拟机对系统上运行的另一个虚拟机有多大影响。
我想知道在 VM 中执行此操作的最简单方法是什么,如果可能的话,可以避免下载、编译和构建整个 Ubuntu/其他 Linux VM。我经常使用 Unikernels 来做这些事情,但是我知道的大多数都不支持 fork() 系统调用。
使用 qemu kvm,在无头 VM 中引导主机内核,串行 I/O(重定向到您运行它的终端):
将其编译
fork-bomb.c
成静态init
可执行文件:在根目录下创建一个 initramfs
init
:在其上启动 VM:
按Ctrl+a然后x终止 VM。
您可以添加 a
-m 4G
以获得 4GiB 的 RAM 而不是默认的 128MiB,-smp 4
以获得 4 个 CPU 而不是 1 个。请参阅man qemu-system-x86_64
其他自定义虚拟硬件的方法。Ctrl+ a,c获取 qemu 监控控制台,您可以在其中热插拔更多组件或检查 VM 的状态/配置、挂起、保存状态等。在这里,我们启用最大的 Linux 内核调试级别
debug=9
;您可以在运行时通过发送 sysrq 后跟一个数字来更改它。对于串行控制台,sysrq 是通过发送“中断”,在这里您可以使用Ctrl+ a,来完成b。