仮想マシンで単純な単一ファイルCプログラムを実行しようとしています。実際、これはフォーク爆弾Cプログラムです:
#include <stdio.h>
#include <sys/types.h>
int main()
{
while(1)
{
fork();
}
return 0;
}
この仮想マシンがシステムで実行されている他の仮想マシンにどれだけの影響を与えるかを確認するためにこれを行いたいと思います。
仮想マシンでこれを行う最も簡単な方法が何であるかを知りたいです。可能であれば、Ubuntu/その他のLinux仮想マシン全体をダウンロード、コンパイル、ビルドしないでください。私はこのようなことによくユニカーネルを使用しますが、私が知っているほとんどのユニカーネルはfork()システムコールをサポートしません。
答え1
qemu kvmを使用してヘッドレス仮想マシンでホストカーネルを起動し、シリアルコンソールI / Oを使用します(それを実行している端末にリダイレクト)。
fork-bomb.c
静的実行可能ファイルにコンパイルしますinit
。gcc -static -o init fork-bomb.c
ルートディレクトリにinitramfsを作成します
init
。bsdtar --format newc -cf initrd init
仮想マシンを起動します。
kvm -nographic \ -kernel "/boot/vmlinuz-$(uname -r)" \ -initrd initrd \ -append 'console=ttyS0 debug=9'
Ctrl+を押して仮想マシンを終了しますa。x
1つを追加-m 4G
して4GiB RAM(デフォルト128MiBではなく)を取得し、-smp 4
4つのCPU(1つではなく)を取得できます。man qemu-system-x86_64
仮想ハードウェアをカスタマイズする別の方法を学びます。Ctrl+ a、cより多くのコンポーネントをホットプラグしたり、仮想マシンの状態/構成、一時停止、保存状態などを確認したりできるqemuモニタコンソールをインポートします。
ここでは、最大Linuxカーネルのデバッグレベルを有効にしますdebug=9
。 sysrqの後に数字を送信して、実行時にこれを変更できます。 sysrqは、コンソールがシリアル状態にあるときに「割り込み」を送信することによって実装されます。ここでCtrl+を使用してaこれを行うことができますb。