我怎样才能摆脱叉子炸弹?

我怎样才能摆脱叉子炸弹?

我尝试了 fork 炸弹代码:

:(){:|:&};:

并关闭了 PuTTy。现在它不接受新的连接(拒绝服务攻击)。

我怎样才能恢复呢?

答案1

您可能需要硬重启计算机。

假设您有控制台访问权限,您可以尝试获取进程组 ID (PGID) 并使用以下命令终止它:

kill -- -PGID

或者使用SIGKILL代替SIGTERM

kill -9 -- -PGID

但实际上可能无法获取 PGID,因为系统可能已经被分叉进程占用,从而造成死锁。

当对用户或组可以拥有的进程数量没有足够的限制时,可能会发生这种死锁。因此,在尝试诸如 fork-bomb 之类的破坏性操作之前,最好先设置一个下限。

答案2

您已经使用经典的“fork bomb”耗尽了系统的所有进程,现在您无法让系统运行进程来帮助您(并且所有命令、程序等都需要进程“运行”)。任何干预都必须来自系统外部(例如,重置虚拟机、关闭电源、CtrlAltDelete)。您不明白代码的意思吗?

:(){:|:&};:

:()  

定义一个shell函数,名为“:”。

   {

开始函数的定义,即:

      :

调用“:”函数。

       |  

通过管道输出“:”

        :  

再次调用“:”

         &

派生一个进程将管道(:|:)放在后台。

          } 

函数定义结束“:”

           ;

定义“:”函数的 shell 语句结束

            : 

调用“:”函数开始。

如果您在不理解代码的情况下运行代码,那么您就接受代码的结果。

答案3

根据理论上应该可以使用Alt+SysRq+f来消除 fork 炸弹 — — 不过,这可能只有当内核能够分配足够的内存来杀死它时才有可能。

答案4

如果你不能重新连接,您没有机会。也许您可以等待out of memory error

如果你连接,尝试以下命令

pkill -f :

正如你在评论中所说的那样

我在虚拟盒中运行它

通过 VirtualBox 重置机器。

相关内容