cmd.exe:如何启动后台进程,运行一些东西,停止后台进程

Sei*_*iti 3 command-line-interface batch background-process

我想运行一个批处理脚本:

  • 启动后台进程(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?
Run Code Online (Sandbox Code Playgroud)

Eva*_*son 8

你说“DOS”,但我想你的意思是 Windows CMD shell。(毕竟,MS-DOS 不是多任务操作系统。)

好的,好的 - 这是我刚刚完成的一个黑客。即使提出这个建议,我也觉得有点脏。

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%"
Run Code Online (Sandbox Code Playgroud)

假设“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%"
Run Code Online (Sandbox Code Playgroud)

真的让我觉得很脏。这将创建一个带有随机标题的 CMD 窗口,然后在单独的窗口中启动“java”。TASKKILL 上的“/T”将杀死“FOO”窗口——即“java”窗口的所有子进程。

我觉得恶心。>微笑<