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