微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)几乎肯定不会起作用,但你可以试试.我不是因为我现在想让我的系统运行;)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐