Fork炸弹

2013-02-01

在 bash 中, 有个经典的递归脚本: Fork炸弹, 他是Jaromil 在 2002 年设计的, 一个精简的 fork炸弹的实现,整个程序从函数定义到调用仅仅包含 13 个字符, 好厉害!!!

-----------------------------------------------------------------------

.(){ .|.& };.

-----------------------------------------------------------------------

这串字符乍看上去根本就看不出个所以然来,下面让我们逐一解释一下它究竟在干些什么??

-----------------------------------------------------------------------

1 .() 2 { 3 .|.& 4 } 5 ; 6 .

----------------------------------------------------------------------- 第 1 行说明下面要定义一个函数,函数名为小数点,没有可选参数。 第 2 行表示函数体开始。 第 3 行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。 第 4 行表示函数体结束。 第 5 行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。 第 6 行表示调用本函数。

一旦运行 fork 炸弹,会以2的指数次幂的速度不断产生新进程,这会导致系统资源会被迅速耗光,最终除非重新启动机器,否则基本上就毫无办法了。为了防止这会造成太大的损害,我们可以使用 ulimit 限制每个用户能够创建的进程数。 ulimit -n

分类:安全编程 | 标签: |

相关日志

评论被关闭!