BASH fork 炸弹 简述
在 bash 中, 有个经典的递归脚本: Fork炸弹, 他是Jaromil 在 2002 年设计的, 一个精简的 fork炸弹的实现,整个程序从函数定义到调用仅仅包含 13 个字符, 好厉害!!!-----------------------------------------------------------------------
.(){ .|.& };.
-----------------------------------------------------------------------
这串字符乍看上去根本就看不出个所以然来,下面让我们逐一解释一下它究竟在干些什么??
-----------------------------------------------------------------------
1 .()
2 {
3 .|.&
4 }
5 ;
6 .
-----------------------------------------------------------------------
第 1 行说明下面要定义一个函数,函数名为小数点,没有可选参数。
第 2 行表示函数体开始。
第 3 行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。
第 4 行表示函数体结束。
第 5 行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。
第 6 行表示调用本函数。
一旦运行 fork 炸弹,会以2的指数次幂的速度不断产生新进程,这会导致系统资源会被迅速耗光,最终除非重新启动机器,否则基本上就毫无办法了。为了防止这会造成太大的损害,我们可以使用 ulimit 限制每个用户能够创建的进程数.