Shell炸弹
:(){ :|:& };:
写成脚本形式
:()
{
:|: &
}
;
:
第 1 行说明下面要定义一个函数,函数名为冒号,没有可选参数。
第 2 行表示函数体开始。
第 3 行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。
第 4 行表示函数体结束。
第 5 行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。
第 6 行表示调用本函数。
冒号”:”其实是函数名,这个bash脚本就是在不断的执行该函数,然后不断fork出新的进程。
解决方法: ulimit -u 128将用户可以创建的最大进程数限制为很小,一两百即可,执行fork炸弹时会迅速fork出大量进程,此后会由于资源不足而无法继续执行。