【问题标题】:IS there a way to get the pid of a process started using a batch file?有没有办法让使用批处理文件启动进程的 pid?
【发布时间】:2020-07-20 06:51:31
【问题描述】:

所以今天我开始了一个有趣的项目。我希望能够使用不和谐机器人启动和停止我的世界服务器。为了启动服务器,我决定使用批处理文件来执行命令。这很简单,我能够验证它是否工作,因为我可以运行它并加入“localhost”服务器。

下一步是在 Python 中创建一个不和谐的机器人,我以前做过,也没有花很长时间。我能够在我制作的测试不和谐服务器上验证该机器人是否响应了命令。

最后一步是制作 discord 机器人的命令来启动和停止服务器。我能够使用subprocess 库来调用批处理文件并启动服务器。

我的困难在于关闭服务器。我打算在运行正确的命令时使用子进程的 pid 来杀死它。但是,我遇到了获取服务器 pid 的问题,因为 subprocess.pid() 让我获得了批处理文件的 pid(我认为)。当我尝试结束它后连接到服务器时,我能够连接。

有没有办法获得以批处理文件启动的进程的 pid?如果您需要查看代码或批处理文件,请告诉我!

我也尝试运行批处理文件直接运行的命令,但在权限方面遇到了困难,所以我不确定这是不是更好的解决方案。

【问题讨论】:

  • 你也可以使用imagename。例如:‘taskkill /f /im server.xxx’。此外,如果您正在为烫发而苦苦挣扎;你试过在管理员模式下运行控制台吗?
  • 您的意思是由同一个 cmd 会话启动的进程吗?

标签: python batch-file


【解决方案1】:

如果您想查找由与当前批处理/cmd 实例启动的子进程,您可以使用 WMI 和 getCmdPID.bat,这将返回错误级别中 cmd 的当前 pid:

call getCmdPID
wmic path Win32_Process  where ParentProcessId='%errorlevel%' get

如果它在不同的 cmd 实例中,您可以使用 WMIC 启动服务器以获得启动的进程 PID:

WMIC process call create "c:\some.exe","c:\exec_dir"

并将输出重定向到您以后可以阅读的文件。

【讨论】:

  • 所以我想我对你的回答有几个问题。我会在启动服务器的同一个批处理文件中call getCmdPID 吗?
  • @UnboltingZero0 - 是的。并且您可以将子进程的 PID 保存在某些文件中,以便以后获取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2010-10-23
相关资源
最近更新 更多