フォークボムメモリ不足エラーを停止する方法 - RHEL 6

フォークボムメモリ不足エラーを停止する方法 - RHEL 6

フォーク爆弾の効果をテストするためにテスト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方法(設定を介して)は通常ほとんど機能しませんが、試してみることができます。そうではありません。今はシステムを実行し続けたいからです。 ;)

おすすめ記事