カーネルをpanicさせてみよう

この記事を理解できない場合は,マネしないでください

Unix系OSには panic() というシステムを停止(クラッシュ)させる関数があります.
Linux で呼び出してみましょう.

panic() 関数

Un*x (Unix-like) OSのカーネルには,伝統的に panic() 関数があります.
これを呼び出すと,システム(カーネル)が停止(クラッシュ)します.
Windowsでいうブルースクリーンのような状態になります.
リセットボタンを押したり,電源を一度切って入れなおしたりしないとシステムは動きません.

OS(カーネル)が致命的なバグに遭遇したときなどに呼び出します.
システムを継続させられないときや,強制停止させた方がましな時に呼び出しますが,
安全な停止でないので行うとシステムが壊れるかもしれません

カーネル内の関数で,カーネル空間で呼び出され,カーネル空間で実行されます.

panic()を呼び出すモジュール

以下のプログラムを作成して,コンパイル,実行(ロード)すると panic() が呼ばれ,システムが停止します.
非常に危険ですので,承知の上でおこなってください.
ローダブルモジュールの作成方法はこちらをご覧ください.

kernelpanic.c

#include <linux/module.h>
static int __init panic_init(void) {
        panic("PANIC??");
        return 0;
}
module_init(panic_init);

Makefile

obj-m := kernelpanic.o

コンパイルと実行

コンパイル

make -C /lib/modules/`uname -r`/build M=`pwd` modules

実行(ロード)

以下を行うと,panic()が呼ばれ,システムが停止します
理解した上で実行してください.

insmod kernelpanic.ko

実行後は、リセットボタン押すか、電源ボタンを長押しするか、PCを廃棄するか、などの対応をして下さい.

panic()後に自動的に再起動

コマンドラインから以下のように設定すれば,panic()が呼ばれた後に自動的に再起動します.
(太字がユーザの入力)

# sysctl kernel.panic=10
kernel.panic = 10

panic()の10秒後に自動的に再起動する例

コマンドラインからpanicさせる

panicさせるインターフェイスが用意されており,
以下のコマンドを打つと,panicさせられます

echo c > /proc/sysrq-trigger


この記事が気に入ったらサポートをしてみませんか?