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

标签 bash unix

<分区>

根据维基百科,下面是一个非常优雅的 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/

相关文章:

bash - 在子文件夹 bash 中查找文件

bash - awk:删除重复项并创建一个新的 csv 文件

php - 脚本必须在 24 小时内执行 X 次。我如何随机化它?

linux - 编写将文件复制到子文件夹的脚本

mysql - 在没有安装mysql的情况下在unix bash中运行mysql命令?

linux - Grep 一件事然后从下面的行中删除

linux - 如何通过 $@ 将表达式中带有空格的 sed 命令传递给 Bash 函数

bash - 返回一个月的最后一天

linux - 检查文件中的单词,然后在同一行的末尾添加一个单词

linux - 如何在不实际执行 ssh 的情况下查找是否可以通过 SSH 访问远程主机