Command-Line-Interface

cmd.exe:如何啟動後台程序,執行一些東西,停止後台程序

  • May 21, 2012

我想執行一個批處理腳本:

  • 啟動後台程序(Selenium RC 伺服器,如果重要的話);
  • 等到後台程序開始監聽某個埠(或等待一段固定的時間);
  • 執行一些指令;
  • 停止後台程序。

我寫了這個:

start java -jar "path\selenium-server.jar" 
ping -n 5 127.0.0.1 >NUL
"path\Gallio.Echo.exe" "path\MyAssembly.dll"
REM now, how do I stop the background process?

你說“DOS”,但我想你的意思是 Windows CMD shell。(畢竟,MS-DOS 不是一個多任務作業系統。)

好的,好的——這是我剛剛完成的一個hack。即使提出這個建議,我也覺得有點骯髒。

SET TASK=%RANDOM%-SELENIUM-SERVER-%RANDOM%
start "%TASK%" java -jar "path\selenium-server.jar"
ping -n 5 127.0.0.1 >NUL"
path\Gallio.Echo.exe" "path\MyAssembly.dll"
taskkill /FI "WINDOWTITLE eq %TASK%"

假設“java”命令與視窗標題無關,那麼“START”命令會將視窗標題設置為“隨機數”-SELENIUM-SERVER-“隨機數”,然後 TASKKILL 將殺死任何帶有那個標題。

呃……這讓我覺得很髒。

如果“java”確實與視窗標題混淆,您也可以這樣做:

SET TASK=%RANDOM%-SELENIUM-SERVER-%RANDOM%
start "%TASK%" cmd /k start java -jar "path\selenium-server.jar"
ping -n 5 127.0.0.1 >NUL"
path\Gallio.Echo.exe" "path\MyAssembly.dll"
taskkill /T /FI "WINDOWTITLE eq %TASK%"

真的讓我覺得很髒。這會創建一個帶有隨機標題的 CMD 視窗,然後在單獨的視窗中啟動“java”。TASKKILL 上的“/T”將殺死“FOO”視窗的所有子程序——即“java”視窗。

我覺得噁心。>微笑<

引用自:https://serverfault.com/questions/35305