修改 .bat 文件以不仅启动同时进程,还关闭它们

Posted

技术标签:

【中文标题】修改 .bat 文件以不仅启动同时进程,还关闭它们【英文标题】:Modify .bat file to not only launch simultaneous processes, but also close them 【发布时间】:2021-10-02 19:38:26 【问题描述】:

我正在 Windows 上开发一个简单的多人纸牌游戏。出于测试目的,我想生成客户端 4 次,每次都来自其自己的 CMD 提示符,以便我可以看到每个实例的 stdout 单独。

我当前的 startclient.bat 文件是:

echo "starting 4 player clients" 
start cmd /k ..\.venv\Scripts\python.exe player_main.py &
start cmd /k ..\.venv\Scripts\python.exe player_main.py &
start cmd /k ..\.venv\Scripts\python.exe player_main.py &
start cmd /k ..\.venv\Scripts\python.exe player_main.py &
pause

总共打开 5 个 CMD 提示和 4 个游戏客户端。

如果我关闭链接到游戏客户端的 CMD 提示,游戏客户端 (python) 也会关闭,这很棒!

如果我关闭主 CMD 提示 (startup.bat),其他 4 个 CMD 提示不会关闭。 如何修改我的 .bat 文件,以便当我关闭主 CMD 提示时,所有内容都会立即关闭?

【问题讨论】:

你为什么使用cmd /K来运行可执行文件python.exe?为什么不简单地运行start "" "..\.venv\Scripts\python.exe" "player_main.py"?为什么要附加& 【参考方案1】:

我会让你玩 "Truth or Consequences" 但这对我有用。

taskkill /t /fi "windowtitle eq Player2*"
SUCCESS: Sent termination signal to process with PID 26904, child of PID 26364.
SUCCESS: Sent termination signal to process with PID 26364, child of PID 24012.

taskill /t /fi "imagename eq cmd.exe"
ERROR: The process with PID 23176 (child process of PID 24012) could not be terminated.
Reason: The process cannot terminate itself.
ERROR: The process with PID 24012 (child process of PID 7440) could not be terminated.

游戏是 A Foot Dear Watson。

我可以玩脏游戏和 /F(强制)控制台以从外部关闭,但由于您添加了暂停,因此只需在“按任意键”后关闭 4 个外壳,让第五个外壳自然而干净地关闭。一旦你对这个过程感到满意,就可以删除超时,无论 shell 是否已经关闭。

您可以根据自己的需要调整以下内容

Title Master & Mode 26,10 & color 50
Start "Player1" %comspec%  /K "Color 40 & Mode 30,10 & Pause"
Start "Player2" %comspec%  /K "Color 20 & Mode 30,10 & Pause"
Start "Player3" %comspec%  /K "Color 10 & Mode 30,10 & Pause"
Start "Player4" %comspec%  /K "Color 60 & Mode 30,10 & Pause"

Pause

taskkill /t /fi "windowtitle eq Player1*"
taskkill /t /fi "windowtitle eq Player2*"
taskkill /t /fi "windowtitle eq Player3*"
taskkill /t /fi "windowtitle eq Player4*"
timeout 4
exit /b

【讨论】:

谢谢,效果很好。必须进行 2 处修改。首先,windowtitle 末尾需要一个 *,因为窗口标题附加了游戏启动命令。其次,如果没有 /F,我的应用程序将无法关闭(可能是由于事件循环)。

以上是关于修改 .bat 文件以不仅启动同时进程,还关闭它们的主要内容,如果未能解决你的问题,请参考以下文章

supervisor

使用supervisor管理进程

supervisord使用

Supervisor使用手册

Supervisor 进程管理工具

supervisor——进程管理工具