fork 炸弹,当闪存驱动器弹出时终止

fork bomb which terminates when flash drive is ejected

我正在尝试制作一个叉式炸弹,一旦存储它的闪存驱动器被移除,它就会自行关闭。到目前为止,这是我的代码:

:start
start %0
IF EXIST E:\forkbomb.bat goto start

出于某种原因,即使闪存驱动器被移除它仍然保持打开状态,为什么一旦闪存驱动器不再插入并导致程序退出,条件不会变为假?谢谢!

forkbomb 通常会在几秒钟内使您的系统无法运行。因此,您只有几秒钟(如果不是更少的话)来移除 USB 驱动器。当生成太多进程时,断开连接可能会很晚,因为其他进程占用了 CPU 而 stick 仍然是 "plugged in"。即使文件不存在,队列中也有很多该死的东西,即使这样新进程也会继续产生,条件已经满足。

此外,对于这种侮辱,您深表歉意,但您的尝试实在是太愚蠢了。你真的了解叉子炸弹的工作原理吗?因为你说的是​​ "the program"(你应该说的是“很多很多很多很多过程”)。简而言之,fork 炸弹只是一个自我复制的过程,它会再次复制,依此类推。你垃圾了你的系统内存太快了!

交换第 1 行和第 2 行 ;)

从技术上讲,它不再是叉子炸弹,但它仍会产生许多windows,一旦闪存驱动器消失,他们就会全部自我放逐。

编辑,深思熟虑,还需要一个IF。

IF EXIST E:\forkbomb.bat start %0
:start
IF EXIST E:\forkbomb.bat goto start

事实上,您甚至可以通过最初的叉形炸弹设计来碰碰运气。

从概念上讲,它对您不起作用,可能是因为每个实例都必须在驱动器被移除的实例中超过下面突出显示的行:

:start
start %0   <<<< this line
IF EXIST E:\forkbomb.bat goto start

因为即使其中一个实例在开始之前,它也会继续创建新实例(没有循环)。因此,从本质上讲,您的叉子炸弹会退化为一种情况,即每个 window 都会创建一个新的 window.

tl;dr 事不宜迟,这是我修改后的解决方案

:begin
IF NOT EXIST E:/forkbomb.bat goto end
start %0
goto begin
:end

现在这是一个完整的前叉炸弹,当驱动器被移除时,它会尽快清理自己。

干杯