Como obtenho o PID de um processo do conhost associado ao arquivo de lote e ao processo cmd que o criou?

1

Digamos que eu tenha vários processos conhost que já estão em execução. Agora eu executo um arquivo de lote, que inicia um processo cmd que, por sua vez, faz com que outro processo conhost seja aberto. De dentro do arquivo de lote

Meu objetivo é ser capaz de fechar todos os outros processos conhost que estavam sendo executados anteriormente (ou possivelmente depois que o arquivo em lote foi executado) e não fechar o conhost associado ao próprio arquivo de lote e cmd.exe fazendo todo o fechamento. Se isso conhost for fechado, seu processo cmd e o arquivo em lote serão finalizados prematuramente (eu quero que ele faça outras coisas depois disso).

Esta não é uma duplicata da pergunta feita no link acima. Essa pergunta tratou apenas da obtenção do pid do cmd , não do associado conhost PID .

    
por timothyjb 30.11.2017 / 15:14

2 respostas

0

O snippet de código a seguir pode levar à solução:

@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
    
por 06.12.2017 / 19:23
0

Você pode usar uma ferramenta da Microsoft chamada Process Explorer para localizar os processos ativos. Você pode encontrar o processo arrastando o símbolo de destino sobre as janelas que deseja obter o PID.

    
por 30.11.2017 / 21:01