Fork爆弾『 :(){ :|:& };:』
前回はUbuntu ServerでFork爆弾を動かしてみた。Linuxに限らず最近のUNIX系オペレーティングシステムはVMやスケジューラがよくできており、なかなか操作不能の状況に陥ったり、カーネルがパニックしたりしてくれない。数分するとFork爆弾プロセスがすべて終了して平時の状況に戻ってしまう始末だ。
ということで、前回は/etc/crontabにFork爆弾を起動するコマンドを仕込んで、常にFork爆弾が動作する状態を作ってみた。/etc/crontabに追加したのは次の設定だ。
/etc/crontabに追加した設定
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
この設定を動作させて、常にCPU使用率が100%といった状況を作り出してみた。ロードアベレージは見たくないほど高くはなるものの、それなりに使えていた。今回はこの設定をUbuntu Desktopで実行してみる。
Ubuntu DesktopでFork爆弾実行
Fork爆弾を仕込んだ状態でUbuntu Desktop 18.04 LTSを実行すると、次のようになる。CPUの利用率はほど100%で占められ、Fork爆弾が動作しまくっていることがわかる。
ロードアベレージを確認すると、実験した環境で2000前後の値を叩き出している。プロセスを生成しまくるFork爆弾が綺麗に動作していることがわかる。
この状態のUbuntu Desktopは「もっさり」の一言に尽きる。何をするにしてももっさりしており、アプリケーションの起動にもだいぶ時間がかかる。しばらく放っておくとスクリーンロックが起動するが、ロックが解除されるのにもずいぶん時間がかかる。
インタラクティブに利用するとなると相当ストレスのたまる環境には仕上がっているものの、操作できないほどひどくもならない。最近のスケジューラはインタラクティブな処理に高い優先度が割りあたるようになっており、もっさりはしつつもそれなりに使える状態になっている。
バッテリーの消費加速、物理的に故障早まる可能性
Ubuntu DesktopにFork爆弾を仕掛けても、動作がもっさりするという嫌がらせ程度にしかならないかもしれない。ノートPCで動作させている場合にはバッテリーの消費がすごく早くなったり、加熱状態が続くことで物理的な故障が早まったりする可能性もある。しかし、システムが落ちたり、また、まるで使えなかったりという状態には持っていくことができない。
状況としては、バックグラウンドやWebブラウザでユーザーの許可していない仮想通貨マイニングが実施される、といった感じと似ているかもしれない。プロセス数が爆発しないだけ仮想通貨マイニングのほうがまだマシだろうか。明らかに影響はあるもののシステムが落ちたりすぐに壊れたりはしない、それが今のFork爆弾の効果といえそうだ。