我打开了两个D:\akshit
文件夹实例。一个是我使用 GUI 手动打开的。但另一个是我使用调用的脚本创建的subprocess.Popen()
。现在,每当我编写以下命令时,只有使用 打开的实例subprocess.Popen()
会被终止:
TASKKILL /F /FI "WINDOWTITLE eq akshit" /IM explorer.exe
taskkill
有人能解释一下他们决定不杀死其他实例的依据是什么吗?我能以某种方式改变这种行为来杀死所有窗口标题为“akshit”的实例吗?
答案1
这不是 TaskKill 的错。虽然您打开了两个文件资源管理器窗口,但这并不一定意味着您为每个窗口打开了两个单独的进程。
可能对您的情况产生影响的设置之一位于:
文件夹选项 → 查看选项卡 → 高级设置 → “在单独的进程中启动文件夹窗口”
此设置有以下效果:
- 如果此复选框不是经过检查,大多数情况下,文件资源管理器窗口在
explorer.exe
承载任务栏和“开始”菜单的同一进程中打开。此进程的窗口标题是固定的。如果您终止此进程,整个 Windows shell 都会消失。 - 如果此复选框是经过检查,托管任务栏和“开始”菜单的进程始终与托管文件资源管理器窗口的进程分开。但仍然,这并不意味着
explorer.exe
每个文件资源管理器窗口都有一个单独的进程。我在 Windows Server 2008 R2 和 Windows 10 1709 中对此进行了测试。explorer.exe
我的所有文件资源管理器窗口始终只有一个进程,explorer.exe
任务栏和“开始”菜单也只有一个进程。WINDOWTITLE
该进程的标题始终是最后打开的文件资源管理器窗口的标题。
打开单独的文件资源管理器进程的一个原因subprocess.Popen()
可能是您在 64 位计算机上运行 32 位 Python,在这种情况下,subprocess.Popen()
只会打开 32 位explorer.exe
。 (这并非发生在所有版本的 Windows 中,但同样,您没有指定任何版本。)另一个原因是进程外 DCOM 调用总是让我绊倒。
但它的要点是:
- 窗口≠进程