Estou tentando executar um programa C simples de um arquivo em uma máquina virtual. Na verdade, é o programa fork bomb c:
#include <stdio.h>
#include <sys/types.h>
int main()
{
while(1)
{
fork();
}
return 0;
}
Quero fazer isso para verificar quanto efeito essa VM teria em outras VMs em execução no sistema.
Eu queria saber qual é a maneira mais fácil de executar isso em uma VM e, se possível, evitar o download, compilar e criar uma VM inteira do Ubuntu/outro Linux. Costumo usar Unikernels para essas coisas, no entanto, a maioria dos que conheço não tem suporte para a chamada de sistema fork ().
Com o qemu kvm, inicializando o kernel do host em uma VM sem cabeça com E/S de console em serial (redirecionado para o terminal a partir do qual você o executa):
Compile isso
fork-bomb.c
em um executável estáticoinit
:Faça um initramfs com apenas isso
init
na raiz:Inicialize a VM nela:
Pressione Ctrl+ ae depois xpara encerrar a VM.
Você pode adicionar um
-m 4G
para obter 4GiB de RAM em vez do padrão de 128MiB,-smp 4
para obter 4 CPUs em vez de apenas 1. Consulteman qemu-system-x86_64
outras maneiras de personalizar o hardware virtual. Ctrl+ a, cpara obter o console do monitor qemu, onde você pode conectar mais componentes ou inspecionar o estado/configuração da VM, suspender, salvar o estado, etc.Aqui habilitamos o nível máximo de depuração do kernel do Linux com
debug=9
; você pode alterá-lo em tempo de execução enviando sysrq seguido de um dígito. Com console em serial, o sysrq fica mandando um "break", que aqui você faria com Ctrl+ a, b.