2014-08-29 32 views
0

我想編寫一個批處理腳本,並且我想檢查一下腳本的一部分,以確定program1.exe是否仍在運行。一旦program1.exe不再運行,我想做點什麼。有效的方式來檢查程序是否仍在運行批處理腳本

我可以寫一個while循環來做到這一點,但它會一遍又一遍地檢查和使用我的CPU中的一個核心的100%。

有沒有一種有效的方法來檢查?也許是一次一次檢查這種情況的黑客?

由於

+0

可能重複[如何等待進程終止執行批處理另一個進程(HTTP ://stackoverflow.com/questions/8177695/how-to-wait-for-a-process-to-terminate-to-execute-another-process-in-batch) – user3469517 2014-08-29 20:21:49

+0

@ user3469517睡眠命令不是所有版本的窗戶,並已貶值。 – Alex 2014-08-29 20:26:03

+0

[如何檢查一個進程是否通過批處理腳本運行]可能的重複(http://stackoverflow.com/questions/162291/how-to-check-if-a-process-is-running-via-a批處理腳本) – npocmaka 2014-08-29 21:19:08

回答

0

可以使用for /f環與tasklist使用所述ping命令1秒超時以檢查處理(也可以使用代替timeout /t 1 >nul)。下面的例子是從我的劇本之一:

:CMBK 
ping -a -n 1 127.0.0.1 1>2>nul 
FOR /F "tokens=1,2,3 delims=: " %%A IN ('tasklist /fi "imagename eq program1.exe" /fo list') do set imgnm=%%A 
if not '%imgnm%'=='INFO' goto cmbk 
0

是否有檢查的有效途徑?也許是一次一次檢查這種情況的黑客?

使用timeout /t 1命令。如果您不想要「等待1秒鐘,按一個鍵繼續...」消息出現,請使用timeout /t 1 > nul

2

嘗試這樣的:

@echo off 
Set "MyProcess=Notepad.exe" 

:start 
tasklist | find /i "%MyProcess%">nul && goto:wait || start %MyProcess% 
goto:start 

:wait 
ping localhost -n 3 >nul 
goto:start 

只需用程序的名稱替換的Notepad.exe

相關問題