2009-12-10 39 views
2

警告:恶意代码。不要试试这个。它仅出于教育目的出现在这里。为什么这个linux shell命令暂停系统?

如果你在你的shell中键入这个shell代码片段,你的系统似乎停止了,你知道为什么吗?

:() { :|:& }; :  # 

你能做的唯一的事情就是重新启动系统.. 您能否给我一些解释

+1

你应该说明这是恶意代码。 – 2009-12-10 08:03:19

+0

同意。这是一个叉子炸弹。 – zen 2009-12-10 08:09:03

+3

我不认为“不是真正的问题”是合理的。这个恶意代码的工作原理当然是一个有效的问题,正如一大堆upvotes的出色答案所表明的那样。 – caf 2009-12-10 10:26:03

回答

20

这是一个无限递归。你正在定义一个名为':'的函数,它调用自己并将自己的输出管道输出到自己的另一个实例,并将其自动转出。由于'&',管道也分叉并在后台执行。最后一个':'实际上启动了调用(分号刚刚结束了先前的命令,这是定义函数,换行符也会在这里执行)。

为了使它更清楚,这是它做什么

foo() { 
    foo | foo & 
} 
foo 

这几乎是一个叉炸弹,具有大规模使用IPC资源的结合。

+2

问题和答案+1;这个问题最终在这里似乎有点过分热心。 – 2009-12-10 18:50:52