2017-12-18 317 views
0

我有一个运行另一个进程的循环批处理文件。如何在不停止批处理的情况下停止当前正在运行的cmd进程?

如果一个进程抛出一个错误,它将基本上重启自己。

这里是短版:

:start 
C:\Squid\bin\squid.exe 
timeout 1 
goto start 

与上面的代码的问题是,有时我需要重新启动有力当前运行的进程。

现在,如果我按CTRL + C它实际上终止该批次本身并关闭窗口,这不是我想要的........

我可以写另一个批处理文件taskkill命令,但我不能,因为有不同进程ID的此过程的许多实例。

感谢您的帮助!

回答

0

其实我可以用启动/等待命令,这是一样的上面,因为它会等待文件来执行,但会在不同的窗口中打开它,我可以很容易地接近和强制程序重新启动无需终止我的批处理。

:start 
start /wait C:\Squid\bin\squid.exe 
timeout 1 
goto start 

注意:在关闭批处理时可能会提示终止执行。我发现,应对在这里的方式:https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-y-n-confirmation

rem Bypass "Terminate Batch Job" prompt. 
if "%~1"=="-FIXED_CTRL_C" (
    REM Remove the -FIXED_CTRL_C parameter 
    SHIFT 
) ELSE (
    REM Run the batch with <NUL and -FIXED_CTRL_C 
    CALL <NUL %0 -FIXED_CTRL_C %* 
    GOTO :EOF 
) 
+0

如果你在源squid.exe的控制权,注册一个控制台控制处理程序或C'SIGBREAK'处理程序。然后,当用户关闭控制台时,squid.exe有5秒的时间处理事件,以正常退出代码正常退出,而不是使用'STATUS_CONTROL_C_EXIT'异常退出。 – eryksun

+0

尽管文档没有明确要求,但强烈建议*始终提供标题参数作为第一个参数,因为未记录的行为会导致它吞下其他参数。 – Tzalumen

相关问题