cmd.exe: como iniciar um processo em segundo plano, executar algumas coisas, parar o processo em segundo plano

3

Eu quero executar um script em lote que:

  • inicia um processo em segundo plano (um servidor RC Selenium, se isso for importante)
  • aguarda até que o processo em segundo plano comece a escutar alguma porta (ou esperar uma quantidade fixa de tempo);
  • execute algumas instruções;
  • interrompe o processo em segundo plano.

Eu escrevi isto:

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?
    
por Seiti 02.07.2009 / 23:16

1 resposta

8

Você diz "DOS", mas imagino que esteja representando o shell do Windows CMD. (MS-DOS não é um sistema operacional multitarefa, afinal.)

Ok, ok-- Aqui está um hack que eu acabei de fazer. Eu me sinto meio suja até sugerindo isso.

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%"

Assumindo que o comando "java" não faz muito com o título da janela, o comando "START" definirá o título da janela como "número aleatório" -SELENIUM-SERVER- "número aleatório" e, em seguida, o TASKKILL matará qualquer janela com esse título.

Eca ... isso me faz sentir sujo.

Se o "java" mexer no título da janela, você também pode fazer:

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%"

Isso realmente me faz sentir sujo. Isso cria uma janela CMD com o título aleatório que, por sua vez, inicia o "java" em uma janela separada. O "/ T" no TASKKILL irá matar qualquer processo filho da janela "FOO" - ou seja, a janela "java".

Eu me sinto mal. > sorriso <

    
por 02.07.2009 / 23:28