web-dev-qa-db-ja.com

バッチファイルに関連付けられたコンホストプロセスとそれを作成したcmdプロセスのPIDを取得するにはどうすればよいですか?

すでに実行されているconhostプロセスがいくつかあるとします。次に、バッチファイルを実行します。これにより、cmdプロセスが開始され、別のconhostプロセスが開きます。バッチファイル内から

私の目標は、以前(またはバッチファイルの実行後に)実行されていた他のすべてのconhostプロセスを閉じ、を閉じないようにすることです。 )conhostは非常にバッチファイルに関連付けられており、cmd.exeすべてのクロージングを行います。そのconhostが閉じられると、そのcmdプロセスも閉じられ、バッチファイルは途中で終了します(その後、他のことを実行してほしい)。

これは、上記のリンクで尋ねられた質問の複製ではありません。その質問は、pidcmdの取得のみを扱い、関連するconhostPID

1
timothyjb

次のコードスニペットは解決策につながる可能性があります。

@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
0
JosefZ

Process Explorerと呼ばれるMicrosoftツールを使用して、アクティブなプロセスを見つけることができます。 PIDを取得するウィンドウ上にターゲットシンボルをドラッグすることで、プロセスを見つけることができます。

enter image description here

0
kimo pryvt