这个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占了上风。