互联网上流传着一个 shell 脚本,如下所示:
:(){ :|: & };:
基本上这个 shell 脚本只是创建一个调用自身的函数,导致无限递归。显然,这是一个分叉炸弹,它会一直持续下去,直到耗尽资源并使您的系统崩溃。
我的问题是,这个脚本不会导致堆栈溢出并导致 shell 在消耗所有系统资源之前出现段错误吗?这到底是如何运作的?
答案1
在现代 Linux 版本中,如果您在 bash 中运行该代码,它不会使您的系统崩溃。它的作用是滥用“fork”系统调用。你的函数中的“&”意味着它在后台执行,当它尝试这样做时,它使用 fork() 系统调用。它会分叉很多次,以至于分叉将不可用,因此你将无法启动新的应用程序,因为这也需要分叉,但是应用程序和您已经运行的应用程序就可以了。