这个bash叉炸弹是如何工作的?

根据维基百科,以下是一个非常优雅的bash叉炸弹:

:(){ :|:& };: 

它是如何工作的?

打破它,有三大块:

 :() # Defines a function, ":". It takes no arguments. { ... }; # The body of the function. : # Invoke the function ":" that was just defined. 

在主体内部,该function被调用两次,并且pipe道是背面的; 进程上的每个连续调用都会产生更多的“:”调用。 这导致了系统资源的爆炸性消耗,使事情停滞不前。

请注意,调用它一次,无限recursion,将不够好,因为这只会导致原始进程的堆栈溢出,这是混乱的,但可以处理。

一个更人性化的版本是这样的:

 kablammo() { # Declaration kablammo | kablammo& # The problematic body. }; kablammo # End function definition; invoke function. 

编辑:下面的威廉的评论是我上面所说的更好的措辞,所以我编辑,以纳入这一build议。

简短的回答:

冒号(“:”)成为一个函数,所以你正在运行函数传递给函数,并将其放在后台,这意味着每调用一次函数,函数的两个副本都会被调用。 recursion占了上风。