2017-12-18 188 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

相關問題