Убить конкретный экземпляр процесса на окнах

1285
Probel

Я не смог найти помощь в этом конкретном вопросе, и мне интересно, есть ли у него решение. У меня есть несколько экземпляров программы, работающей в Windows 7. Как я могу закрыть определенное окно (возможно, на основании имени открытого файла)?

Предыстория: у меня на рабочем столе клиентское приложение для программного обеспечения ETL (SAS EG), и обычно что-то идет не так, и сессия зависает. Но у меня одновременно открыто много сессий, т.е. несколько экземпляров программы, запущенной на моем рабочем столе, каждый из которых имеет свой собственный сеанс на удаленном сервере. Я хочу убить только ту, которая замерзла и продолжить работу с другими экземплярами. Я знаю, что это возможно, я могу убить один экземпляр из диспетчера задач, но это русская рулетка, поскольку процессы нельзя отличить друг от друга в диспетчере задач. Большое спасибо за любую помощь.

4
Есть ли разница между экземплярами, такими как параметры командной строки или путь к приложению и т. Д.? Вы можете завершить процесс с помощью соответствующего идентификатора процесса, например `TASKKILL / PID 1230 / PID 1241 / PID 1253 / T` Biswapriyo 6 лет назад 0
Если вы используете [Process Explorer] SysInternals (https://docs.microsoft.com/en-gb/sysinternals/downloads/process-explorer), вы можете просмотреть все файлы, открытые для процесса, и / или найти все процессы, которые имеют файл открыт (можно использовать частичное совпадение). AFH 6 лет назад 1
У Windows разные названия? DavidPostill 6 лет назад 0
@AFH спасибо, звучит хорошо. но, к сожалению, моя организация не дает нам права локального администратора, поэтому я не смогу ее использовать. Probel 6 лет назад 0
@DavidPostill Да, окна имеют разные заголовки в зависимости от имени открытого файла (в данном случае имя проекта). Но названия не могут быть видны в диспетчере задач или с помощью команды `tasklist` Probel 6 лет назад 0
Process Explorer не требует установки: он запускается прямо из каталога, в который вы его распаковали. Это должно быть полностью возможно без прав администратора, если не существует политики, предотвращающей выполнение неутвержденных программ. Поскольку это утилита Microsoft, вы сможете без труда одобрить ее. AFH 6 лет назад 0
@ АФХ, ты совершенно прав. это решает мою проблему на 100%, хотя я все еще поражаюсь, что нет очевидного нативного решения. В любом случае, большое спасибо! Probel 6 лет назад 0
@ user3589177. , , Пара сообщений, которые могут оказаться полезными для этой задачи "потенциально"; дайте мне знать, если у вас есть какие-либо вопросы, проблемы и т. д. ** `1.` ** https://superuser.com/questions/1102108/writing-a-batch-file-to-copy-network-file-and -open-it-then-close-and-loop / 1102120 # 1102120 и ** `2.` ** https://superuser.com/questions/1002737/how-to-use-wmic-to-kill-a -cmd-exe-instance-search-by-its-command-line / 1005056 # 1005056. , , Вам может просто понадобиться способ сохранить PID для каждого экземпляра, а затем способ ссылаться на них по мере необходимости и т. Д. Это должно быть возможно Pimp Juice IT 6 лет назад 0
Кроме того, `TASKLIST / V` показывает заголовок окна. Pimp Juice IT 6 лет назад 1

1 ответ на вопрос

3
DavidPostill

Как я могу убить определенное окно (возможно, основываясь на имени файла, которое открыто)?

окна имеют разные заголовки в зависимости от имени открытого файла (в данном случае это имя проекта).

Вы можете использовать taskkill для уничтожения процессов, имеющих окна с указанным заголовком.

пример

Учитывая следующее окно:

Команда для уничтожения этого экземпляра блокнота, который редактирует файл с именем test.txt:

taskkill /f /fi "windowtitle eq test.txt*" 

Выход:

>taskkill /f /fi "windowtitle eq test.txt*" SUCCESS: The process with PID 5356 has been terminated. 

Заметки:

  • Замените test.txt*на строку, которая однозначно идентифицирует окно вашего приложения.

Дальнейшее чтение