我有以下问题:
我创建了一个批处理脚本,在那里调用自己(因为能够并行写入日志).在脚本中,我启动另一个进程(如start startServer.bat),它启动一个java进程并一直保持打开状态.
在我的原始脚本中,我等待30秒,检查进程是否正在运行并执行以下操作:
exit /B 0
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,窗口显示正在评估退出/ B 0,但窗口仍然保持打开状态.当我用另一个进程关闭窗口(意味着在我的.bat中启动"子"进程)时,我的脚本继续运行.
所以:
scriptA.bat
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
Run Code Online (Sandbox Code Playgroud)
如果我将另一个脚本包裹起来,那是非常奇怪的,例如:
scriptB.bat
-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!
Run Code Online (Sandbox Code Playgroud)
我也尝试了相同的退出0(没有/ B),同样的结果!在第一种情况下,它挂起,在第二种情况下,我的窗口按预期关闭...
你以前有没有人遇到这样的问题,知道这里有什么问题吗?流程挂断了!
这里有关于退出批处理脚本的所有选项的很好的解释:http: //www.robvanderwoude.com/exit.php
具体来说,从该页面:
DOS联机帮助(HELP EXIT)并未明确说明/ B参数退出当前脚本实例,该实例不一定与退出当前脚本相同.即如果脚本在CALLed代码段中,则EXIT/B退出CALL,而不是脚本.
所以你绝对不希望exit /b 0在这种情况下.如果只是exit 0不起作用,请尝试GOTO:EOF.