什么是%0 |%0以及它是如何工作的?

Doo*_*oon 71 windows command-line

如果您在%0|%0内部运行.bat或.cmd文件,您的计算机将开始使用大量内存,并在几分钟后重新启动.为什么这段代码会阻止你的Windows?这个代码以编程方式做了什么?它会被视为"虫子"吗?

Jon*_*art 131

这是Windows版的二战炸弹.

%0是当前正在执行的批处理文件的名称.包含此行的批处理文件:

%0|%0
Run Code Online (Sandbox Code Playgroud)

将永远递归地执行自己,快速创建许多进程并减慢系统速度.

这不是Windows中的错误,它只是在批处理文件中做的非常愚蠢的事情.

  • @Pavel:`.bat`文件的作用是:在文件终止结束时读取指令.如果运行%0:进程1:启动,运行%0(从而创建进程2); 然后死过程2:启动,运行%0(从而创建过程3); 然后死了你总共最多有2个进程在运行,因为创建者会死掉.叉炸弹的重点是创建2个版本.因此P1创建2个进程(1'和1"),这两个进程将创建,每个2(因此4),指数. (10认同)
  • 为什么%0 |%0会破坏窗口,但%0不会? (4认同)

小智 38

这被称为叉炸弹.它不断分裂,直到没有选项,只能重新启动系统. http://en.wikipedia.org/wiki/Fork_bomb

  • @RohanGala:`$0;$0`(适用于 bash 和 zsh,在 Ubuntu 14.04 上测试) (2认同)
  • :(){ :|:& };: 是一个版本 (2认同)

Sam*_*iew 22

这是什么:

%0|%0是一个叉炸弹.它将使用管道生成另一个进程,该管道|异步运行同一程序的副本.这会占用CPU和内存,使系统速度降至接近停止(甚至使系统崩溃).

这是如何工作的:

%0是指用于运行当前程序的命令.例如,script.bat

管道|符号将使第一个命令序列的输出或结果作为第二个命令序列的输入.在fork炸弹的情况下,没有输出,所以它只是在没有任何输入的情况下运行第二个命令序列.

扩展这个例子%0|%0可能意味着script.bat|script.bat.这会再次运行,但也会创建另一个进程来再次运行相同的程序(没有输入).


小智 6

它是一个逻辑炸弹,它不断重建自己并占用你所有的CPU资源.它会使您的计算机过多,并且会强制关闭计算机.如果你在其中创建一个批处理文件并启动它,你可以使用taskmgr结束它.您必须非常快速地执行此操作,否则您的计算机将无法执行任何操作.