linux – 如何阻止Fork Bomb内存错误 – RHEL 6

我设置测试VM来测试fork炸弹的效果.所以我为root用户编辑了如下limits.conf:

root    hard         nproc  512

现在我放下一个这样的叉炸弹:

:(){ :|:& };:

在此之后,一段时间后(我认为达到512限制),出现以下错误

这种情况持续不断.无论如何在没有重启机器的情况下停止此操作?

解决方法:

Is there anyway to stop this without rebooting the machine?

这不是很不可能,你可以通过运气来做到这一点 – 也就是说,你设法在另一个进程被生成之前杀死所有进程.但是你必须非常幸运,所以它不是一个可靠或值得的努力[也许slm比我在这里更幸运,哈哈 – TBH我没有那么努力过.如果你玩优先考虑,你的机会可能会有所改善(见男人),虽然我怀疑这也会影响叉炸弹的功效.

一个更好的想法可能是使用一个超时.有关C中的示例,请参阅脚注编号5至my answer here.2您可以使用shell脚本执行相同的操作,尽管不会像以下那样简短:(){:|:& }; ::

#!/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事实上,如果内核OOM杀手变得幸运,它最终可以自己发生.但是不要屏住呼吸.

2那里用来训练特定炸弹的方法(通过设置vm.overcommit_memory = 2)几乎肯定不会起作用,但你可以试试.我不是因为我现在想让我的系统运行;)

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...