Необходимо получить имя процесса от изменения PID с помощью командного файла - PullRequest
0 голосов
/ 13 октября 2019

У меня случаются случайные зависания приложений, в то время как я могу легко завершить неотвеченные задачи с помощью командного файла, я пытаюсь определить, какие приложения вызывают проблемы. Но я не могу сослаться на задачу, которая уже была убита PID. Я хотел бы, чтобы код отображал приложения-нарушители до или после завершения процесса.

Это то, что я использовал до сих пор, он работает и показывает PID. Но оно не показывает имя приложения.

@echo off

:Start

taskkill /f /fi "status eq not responding"

TIMEOUT /t 30 /nobreak

goto Start


**This is what i've been trying to use to get the offending application name**

    :Start
    Set %processPID% = taskkill.exe /fi "status eq not responding"
    wmic process where "ProcessID=%processPID% get CommandLine, ExecutablePath
    taskkill.exe /f /fi "status eq not responding"
    TIMEOUT /t 5 /nobreak
    goto Start

Это то, что я получаю при запуске нового кода

Похоже, что переменная processPID не устанавливается.

C: \ Users \ razra \ Desktop> Set = taskkill.exe / fi "eq status не отвечает" Синтаксис команды неверен.

C: \ Users \ razra \ Desktop> wmic process, где "ProcessID = get CommandLine, ExecutablePath, - Неверный псевдоним глагола.

1 Ответ

0 голосов
/ 14 октября 2019

Если вы хотите попробовать PowerShell, вы можете достичь той же функциональности.

  1. Зацикливание процессов, имеющих свойство Responding false.
  2. Останавливает процесс по ID.

    Foreach($proc in Get-Process | Where-Object {$_.Responding -eq $false}){
       Write-Host $proc.ID, $proc.Name
       Stop-Process $proc.ID
    }
    
  3. Сохраните код с расширением ps1 и запустите с PowerShell.exe -File <path>
...