Вопрос или проблема
Я запускаю несколько разных экземпляров одного и того же приложения на Windows 10.
Один из них завис, и мне нужно его перезапустить. Это стороннее программное обеспечение, и единственное, что я могу сделать, чтобы отличить это приложение заранее, – это отображать разные заголовки окон.
Есть ли способ получить PID зависшего процесса, о котором у меня есть только заголовок окна (и имя процесса; но имена процессов имеют дубликаты)?
Выполните эту команду в PowerShell, чтобы вывести PID и все открытые заголовки окон:
Get-Process | Where MainWindowTitle | Select ID,MainWindowTitle
Id MainWindowTitle
-- ---------------
12908 Calculator
15728 Calculator
Или вы можете фильтровать по конкретным заголовкам окон, как показано здесь:
Get-Process | Where MainWindowTitle -Like '*Calc*' | Select ID,MainWindowTitle
Используя команду tasklist
из командной строки:
tasklist /fi "windowtitle eq some_window_title"
Где /fi
– это фильтр, который указывает типы процессов для включения или исключения из запроса.
Также можно указать вывод процессов со статусом not running
, как показано ниже:
tasklist /fi "windowtitle eq specific_title" /fi "status ne running"
Пример:
tasklist /fi "windowtitle eq Calculator"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
ApplicationFrameHost.exe 2996 Console 16 40,864 K
CalculatorApp.exe 19360 Console 16 82,492 K
Ответ или решение
Чтобы решить проблему получения идентификатора процесса (PID) из заголовка окна в операционной системе Windows 10, когда ваш запущенный процесс заморожен, и его необходимо перезапустить, важно понимать, как системы Windows обрабатывают процессы и идентификацию окон. В данном случае, когда происходит несколько запусков одной и той же программы, которые отличаются только заголовками окон, основная задача — найти PID процесса с определённым заголовком окна.
Теория
Каждое приложение или процесс, работающий в Windows, имеет уникальный идентификатор процесса (PID). Однако, в случае, когда несколько экземпляров одного приложения запущены одновременно, они могут иметь одинаковые имена процессов, что затрудняет их индивидуальную идентификацию. Заголовки окон могут служить отличительным признаком, особенно, если заранее установлены уникальные для каждого экземпляра приложения.
В Windows процессы можно просматривать и управлять ими с использованием утилит командной строки, таких как Get-Process
в PowerShell или tasklist
в командной строке. Эти команды позволяют фильтровать процессы по различным критериям, включая заголовки окон, что мы и будем использовать.
Пример
Чтобы получить PID по заголовку окна, можно использовать несколько подходов, которые вкратце приведены ниже.
Powershell
-
Получение списка процессов с заголовками окон:
Используйте команду PowerShell для получения списка всех процессов с их заголовками окон:
Get-Process | Where MainWindowTitle | Select ID, MainWindowTitle
Эта команда выведет список всех процессов, у которых заполнен заголовок окна, включая их PID.
-
Фильтрация по конкретному заголовку:
Если вы знаете часть или весь заголовок окна, используйте фильтр
-Like
:Get-Process | Where MainWindowTitle -Like '*YourWindowTitle*' | Select ID, MainWindowTitle
Эта команда отфильтрует процессы, заголовки окон которых содержат установленный шаблон, и покажет только их ID и заголовки.
Командная строка (cmd)
-
Удаление процесса с определённым заголовком окна:
Используйте команду
tasklist
для фильтрации стандартного списка процессов по заголовку окна:tasklist /fi "windowtitle eq Window_Title"
В этой команде
Window_Title
следует заменить на точное название заголовка окна. Эта команда покажет процессы с данным заголовком и их PID. -
Вывод процессов, которые не выполняются:
Чтобы отфильтровать процессы, которые не в состоянии "running", используйте дополнительный фильтр:
tasklist /fi "windowtitle eq Window_Title" /fi "status ne running"
Применение
Теперь, когда вы знакомы с методами, описанными выше, вы можете применять их в своей IT практике:
-
Идентификация замороженного процесса:
- Воспользуйтесь
Get-Process
илиtasklist
, чтобы идентифицировать процессы с нужным заголовком окна и записать их PID.
- Воспользуйтесь
-
Перезапуск или завершение процесса:
-
После определения PID нужного процесса, можно использовать команду
Stop-Process
в PowerShell илиtaskkill
в командной строке, чтобы остановить процесс:Stop-Process -Id PID
В cmd используйте:
taskkill /PID PID
- ‘PID’ следует заменить на фактический идентификатор процесса.
-
-
Перезапуск приложения:
- После завершения процесса вручную перезапустите приложение, чтобы оно вернулось к нормальной работе.
Следуя этому пошаговому руководству вы сможете эффективно управлять приложениями в Windows, получая PID процессов по заголовкам их окон и управляя ими для поддержания стабильности работы системы.