Скажем, у меня есть несколько Conhost процессы, которые уже запущены. Теперь я запускаю командный файл, который запускает cmd
процесс, который, в свою очередь, вызывает другой Conhost процесс, чтобы открыться. Из командного файла
PID
связанных Conhost обработать.Моя цель - закрыть все остальные Conhost процессы, которые были запущены ранее (или, возможно, после запуска командного файла) и не закрывали Conhost связанный с самим пакетным файлом и cmd.exe
делаю все закрытие. Если это Conhost закрывается, и его cmd
процесс, и командный файл завершится преждевременно (я хочу, чтобы после этого он выполнял другие действия).
Это не дубликат вопроса, заданного по ссылке выше. Этот вопрос касался только получения pid
из cmd
не связанный Conhost PID
.
Вы можете использовать инструмент Microsoft под названием Process Explorer, чтобы найти активные процессы. Вы можете найти процесс, перетащив целевой символ над окнами, для которых вы хотите получить PID.
Следующий фрагмент кода может привести к решению:
@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