说我有几个康索进程恰好已经在运行。现在我运行一个批处理文件,它启动一个cmd
进程,而这个进程又会导致另一个进程康索要打开的进程。在批处理文件中
- 我知道我可以获取该批处理文件的 cmd 进程的 PID, 但
- 我不知道该怎么做获取
PID
关联的康索过程。
我的目标是能够关闭所有其他康索先前运行的进程(或者可能是在运行批处理文件之后)并且没有关闭康索与该批处理文件相关联并cmd.exe
执行所有关闭操作。如果康索被关闭,它的cmd
进程和批处理文件也会过早结束(我希望它在那之后做其他事情)。
这不是上面链接中提出的问题的重复。那个问题只涉及获取的pid
,cmd
而不是相关康索 PID
。
答案1
以下代码片段可以找到解决方案:
@ECHO OFF
SETLOCAL EnableExtensions
::: get my own process ID - use any method
::: applied here: altered TonyRoth's answer https://serverfault.com/a/126643/257436
set "_title=a885974x%random%"
title %_title%
for /f "tokens=2" %%G in ('tasklist /V ^| findstr "%_title%"') do (
set "_myProcessID=%%~G"
)
::: get the associated conhost process ID
set "_wQuery=ParentProcessId=%_myProcessID% and Name='conhost.exe'"
::: debug ::: wmic process where "%_wQuery%" get Name, ProcessId, WindowsVersion
for /f "usebackq" %%G in (`
wmic process where "%_wQuery%" get ProcessId^, WindowsVersion^|findstr /R "[0-9]"
`) do set "_myConhostID=%%~G"
::: propagate results
set _my