Команда taskkill уничтожает только файловый менеджер, открытый с помощью subprocess.Popen ()

561
akshit bhatia

Я открыл два экземпляра D:\akshitпапки. Один я открыл вручную с помощью графического интерфейса. Но другой, я создал с помощью сценария, который вызывает subprocess.Popen(). Теперь, когда я пишу следующую команду, subprocess.Popen()уничтожается только экземпляр, открытый с помощью :

TASKKILL /F /FI "WINDOWTITLE eq akshit" /IM explorer.exe 

Может кто-нибудь объяснить, на каком основании taskkillрешается не убивать другие экземпляры? Можно ли как-то изменить это поведение, чтобы убить все экземпляры с заголовком окна «Акшит»?

0
Что произойдет, если вы используете `TASKLIST / F / FI" WINDOWTITLE eq akshit "/ IM explorer.exe`? эта команда должна перечислить задачи. Если он также показывает только один результат, то у вас есть свой ответ. Вы можете использовать TASKLIST, чтобы выяснить, что нужно изменить, чтобы заставить TASKKILL вести себя правильно. LPChip 5 лет назад 0
мы не можем использовать / F или / IM со списком задач. Это дает неверный аргумент. akshit bhatia 5 лет назад 0

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

1

Это не вина TaskKill. Хотя вы открыли два окна File Explorer, это не обязательно означает, что вы открыли два отдельных процесса для каждого.

Один из параметров, которые могут повлиять на вашу ситуацию, можно найти в разделе:

Параметры папки → вкладка «Вид» → «Дополнительные параметры» → «Запускать окна папок в отдельном процессе»

Этот параметр имеет следующие эффекты:

  • Если этот флажок не установлен, в большинстве случаев окна проводника открываются в том же explorer.exeпроцессе, в котором находятся панель задач и меню «Пуск». Заголовок окна этого процесса фиксирован. Если вы убьете этот процесс, вся ваша оболочка Windows исчезнет.
  • Если этот флажок установлен, процесс, в котором размещаются панель задач и меню «Пуск», всегда отделен от процесса, в котором размещены окна проводника. Но, тем неexplorer.exe менее, это не означает, что вы получаете один отдельный процесс для каждого окна проводника. Я протестировал это в Windows Server 2008 R2 и Windows 10 1709. Я всегда получаю ровно один explorer.exeпроцесс для всех моих окон проводника и один explorer.exeдля моей панели задач и меню «Пуск». Этот WINDOWTITLEпроцесс всегда является заголовком окна проводника, которое было открыто последним.

Одной из причин, по которой subprocess.Popen()открывается отдельный процесс проводника, может быть то, что вы запускаете 32-битный Python на 64-битном компьютере, и в этом случае subprocess.Popen()просто открывается 32-битный explorer.exe. (Это происходит не во всех версиях Windows, но, опять же, вы не указали ни одной.) Другая причина - внепроцессный вызов DCOM, который всегда сбивает меня с толку.

Но суть этого такова:

  • Окно ≠ Процесс
Спасибо!! Сейчас работает нормально. Можно ли управлять установкой этой опции через скрипт Python? akshit bhatia 5 лет назад 0
Это возможно, но это не вступит в силу, пока компьютер не будет перезагружен. Это настройка в реестре Windows. Я точно не знаю, где именно, но вы можете использовать Sysinternals Process Monitor, чтобы найти его, если поиск в Google не дал вам ответа. 5 лет назад 0

Похожие вопросы