cmd.exe:如何启动后台进程、运行某些程序、停止后台进程

cmd.exe:如何启动后台进程、运行某些程序、停止后台进程

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

  • 启动后台进程(如果重要的话,启动一个 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?

答案1

您说的是“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%"

假设“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”窗口)的所有子进程。

我感觉不舒服。>微笑<

答案2

您可以使用 Visual Basic 脚本创建一个名为的文件来实现somehow.vbs

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c start /B java.exe ........... ", 0, False

使用 0 和“False”作为这些选项的值,脚本将启动命令java.exe在后台运行 jar 而不显示任何窗口,也不等待它完成后再继续执行脚本的其余部分。

相关内容