在我开始重新发明轮子并自己动手之前,是否有人知道一个应用程序/实用程序可以让我杀死进程,并按进程名称进行过滤和进程所有者?或者可以通过 powershell 完成此操作吗?(我的 powershell-fu 很差劲)。
我查看了pskill
和taskkill
。虽然pskill
允许按进程名称终止,但它不允许我进一步按进程所有者进行过滤。我还通过 wmic ( wmic process
) 查看了 WMI,但 WMI 接口不返回进程所有者(至少据我所知),所以也不能使用它。
基本原理
我在 Windows 上进行了大量开发。其中一些涉及处理组件服务 (COM+)。COM+ 有一个通用主机进程 - dllhost.exe - 它既用于自定义元素(即我开发的东西),也用于系统进程。我可以根据它们以哪个所有者的身份运行来区分它们。因此,例如,我想终止我拥有的所有 dllhost.exe 进程,但忽略 SYSTEM 拥有的进程。
这将节省我定期进入任务管理器并识别和手动终止每一个的时间:-)
答案1
在 powershell 中你可以执行以下操作:
gwmi -query "select * from win32_process where name='PROCESSNAME.exe'" | %{if($_.GetOwner().User -eq 'USERNAME'){$_.terminate()}}
答案2
你观察得还不够仔细。
taskkill /f /fi "imagename eq foo.exe" /fi "username eq Chris"
您甚至可以使用来按加载的模块进行过滤/fi "modules eq libfoo.dll"
。