<分区>
根据维基百科,下面是一个非常优雅的 bash fork 炸弹:
:(){ :|:& };:
它是如何工作的?
<分区>
根据维基百科,下面是一个非常优雅的 bash fork 炸弹:
:(){ :|:& };:
它是如何工作的?
最佳答案
分解下来,分为三大块:
:() # Defines a function, ":". It takes no arguments.
{ ... }; # The body of the function.
: # Invoke the function ":" that was just defined.
在正文中,函数被调用两次,管道在后台运行;对进程的每次连续调用都会产生对“:”的更多调用。这会迅速导致系统资源的爆炸性消耗,使一切陷入停顿。
请注意,调用它一次,无限递归,这还不够好,因为这只会导致原始进程的堆栈溢出,这很困惑但可以处理。
一个更人性化的版本看起来像这样:
kablammo() { # Declaration
kablammo | kablammo& # The problematic body.
}; kablammo # End function definition; invoke function.
编辑:William 在下面的评论是对我上面所说内容的更好措辞,因此我进行了编辑以纳入该建议。
关于bash - 这个 bash fork 炸弹是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991142/