単純なCプログラムを実行する仮想マシンを実行する最も簡単な方法は何ですか

単純なCプログラムを実行する仮想マシンを実行する最も簡単な方法は何ですか

仮想マシンで単純な単一ファイル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+を押して仮想マシンを終了しますax

1つを追加-m 4Gして4GiB RAM(デフォルト128MiBではなく)を取得し、-smp 44つのCPU(1つではなく)を取得できます。man qemu-system-x86_64仮想ハードウェアをカスタマイズする別の方法を学びます。Ctrl+ acより多くのコンポーネントをホットプラグしたり、仮想マシンの状態/構成、一時停止、保存状態などを確認したりできるqemuモニタコンソールをインポートします。

ここでは、最大Linuxカーネルのデバッグレベルを有効にしますdebug=9。 sysrqの後に数字を送信して、実行時にこれを変更できます。 sysrqは、コンソールがシリアル状態にあるときに「割り込み」を送信することによって実装されます。ここでCtrl+を使用してaこれを行うことができますb

関連情報