我正在尝试制作一个叉形炸弹,一旦存储它的闪存驱动器被移除,它就会自行关闭。到目前为止,这是我的代码:
:start
start %0
IF EXIST E:\forkbomb.bat goto start
出于某种原因,即使移除了闪存驱动器,它仍然保持打开状态,为什么一旦不再插入闪存驱动器并导致程序退出,条件就不会变为假?谢谢!
我正在尝试制作一个叉形炸弹,一旦存储它的闪存驱动器被移除,它就会自行关闭。到目前为止,这是我的代码:
:start
start %0
IF EXIST E:\forkbomb.bat goto start
出于某种原因,即使移除了闪存驱动器,它仍然保持打开状态,为什么一旦不再插入闪存驱动器并导致程序退出,条件就不会变为假?谢谢!
交换第 1 行和第 2 行;)
从技术上讲,它不再是分叉炸弹,但它仍然会创建许多窗口,一旦闪存驱动器消失,它们就会全部放逐。
编辑,做了一些进一步的思考,你还需要另一个 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
因为即使其中一个实例在开始之前,它也会继续创建新实例(没有循环)。所以基本上你的叉子炸弹会退化成每个窗口都创建一个新窗口的情况。
tl;博士不用多说,这是我修改后的解决方案
:begin
IF NOT EXIST E:/forkbomb.bat goto end
start %0
goto begin
:end
现在这是一个完整的叉形炸弹,当驱动器被移除时,它会尽快清理自己。
干杯
分叉炸弹通常会在几秒钟内使您的系统无法运行。因此,您只有几秒钟(如果不是更少)来移除 USB 驱动器。当产生太多进程时,断开连接可能会很晚,因为其他进程占用 CPU 并且棒仍将“插入”。即使文件不存在,队列中也有很多东西会继续产生新进程,而条件已经满足。
另外,对这种侮辱感到抱歉,但是您正在尝试的只是愚蠢的。你真的了解叉子炸弹的工作原理吗?因为你说的是“程序”(你应该说的是“很多很多很多很多的过程”)。简而言之,叉炸弹只是一个自我复制的过程,它会再次复制,依此类推。你把你的系统搞砸了记性好快!