フォーク爆弾の効果をテストするためにテストVMを設定しました。そのため、ユーザーのためにlimits.conf
次のように編集しました。root
root hard nproc 512
次に、次のようにフォーク爆弾を落とします。
:(){ :|:& };:
その後、しばらくして(512制限に達する必要があると思います)、次のエラーが発生します。
これは継続して行われます。コンピュータを再起動せずに停止する方法はありますか?
ベストアンサー1
コンピュータを再起動せずに停止する方法はありますか?
完全に不可能ではありません。運がよければできます。つまり、他のプロセスが作成される前にすべてのプロセスを終了できます。1 しかし、あなたは非常に幸運でなければならないので、それは信頼できる価値のある努力ではありません。[おそらくslmが私より運が良いかもしれない、ハハ - 正直、まだそんなに頑張っていない]。優先順位付け(参考資料を参照)について考えると、可能性が高くなることがありますが、man nice
これがフォーク爆弾の効果にも影響を与えると考えられます。
より良いアイデアは、タイムアウトアプローチを使用することです。 Cの例については、脚注5を参照してください。私の答えはここにあります。2 たとえ短くはありませんが、シェルスクリプトを使用して同じことを実行できます:(){ :|:& };:
。
#!/bin/bash
export fbomb_duration=$1
export fbomb_start=$(date +%s)
go () {
now=$(date +%s)
if [[ $(($now-$fbomb_start)) -gt $fbomb_duration ]]
then exit 0;
fi
go &
}
while ((1)); do
go
done
1つの引数(秒)を使用してこれを行います。その後、すべての分割端が消えます。
1実際にカーネルOOMキラーが運が良ければ、最終的には自然に起こることもあります。しかし、息を我慢しないでください。
特定の爆弾を制限する2つのvm.overcommit_memory=2
方法(設定を介して)は通常ほとんど機能しませんが、試してみることができます。そうではありません。今はシステムを実行し続けたいからです。 ;)