キル・スイッチとは?
オペレーティングシステムには、システムを終了するためのコマンドや方法が用意されている。これらを実行すると、ベアメタルで動作していれば、そのままマシンの電源がOFFになる。実はこれら以外にも、オペレーティングシステムにはキル・スイッチと呼ばれる処理に相当するコマンドや仕組みが用意されていることがある。この機能はLinuxにも存在している。
キル・スイッチは故意にカーネルをパニックさせるためのメカニズムだ。UNIX系のオペレーティングシステムではカーネルが何らかの問題で想定外の狂った状態になることをパニックと呼ぶことがあり、カーネルがパニックしたらもうシステムはおしまいだ。再起動でもしない限り、正常な状況に復帰することはほとんどない。
では、なぜこの状況を故意に発生させる方法が用意されているのかということになるのだが、多くの場合、デバッグや開発目的で用意されている。開発時は故意にパニックを発生させたいことがあり、そうした目的で使われることが多い。
そういう機能があるということがわかると、使ってみたくなるのが人情というものだ。今回はいくつか存在するLinuxのキル・スイッチのうち、現在でも利用できる代表的なものを紹介しよう。
Linuxの代表的なキル・スイッチ「SysRq」
今回紹介するキルスイッチはこちらだ。1行目で機能を有効にし、2行目でカーネルパニックを発生させることができる。
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
なお、次のように操作してもやっていることは同じになる。1行目で機能を有効にし、2行目でカーネルパニックを誘発させている。
sysctl kernel.sysrq=1
echo c > /proc/sysrq-trigger
/proc/sysrq-triggerに書き込む文字で処理を変えることができる。cはカーネルパニックを誘発する指定だ。このファイルは書き込む値を変更すると、プロセスの終了やカーネルの管理している情報の表示、システムの停止、ファイルシステムの操作といった低レベルな操作が可能になっている。
キル・スイッチでゴー!
Ubuntu Server 18.04 LTSにログインして先程のコマンドを入力していく。
毎回確実に出るわけではないのだが、運良くいけば次のようなカーネルパニックの様子を確認することができる。
当然だが、デスクトップ版でもこの方法でカーネルパニックを誘発することができる。
キルスイッチをポチッとすると、次のようにシステムがフリーズする。一見すると何も変わっていないように見えるが、一切操作ができない状況になっている。
こんな感じで簡単にカーネルをパニックさせることができる。
通常はこうした機能は使わない
開発者以外のユーザーがこうした機能を使うことは滅多にないと思う。問題が発生した場合、故意にパニックさせるということはあるが、そうした状況には陥ってほしくないものだ。
パニックの発生は正規のシステム終了の手順ではないので、状況によってはファイルシステムに不整合が発生するということも考えられる。運用しているシステムではこうしたコマンドは実行しないほうがよいだろう。