杀死给定进程的次要任务

Posted

技术标签:

【中文标题】杀死给定进程的次要任务【英文标题】:Kill secondary task of a given process 【发布时间】:2019-10-16 00:08:57 【问题描述】:

我正在尝试使用 powershell、批处理、python 终止进程的次要任务......任何我可以保存为脚本并远程运行它的东西。 TaskManager 图片如下:

我想杀死标题较长的那个,让“SAP Logon 740”保持打开状态。树的每个任务都有相同的 PID,所以我不能直接杀死进程。

我想这是可能的,因为我可以手动转到任务管理器,扩展进程并结束该特定任务,但我发现的所有内容都包括终止进程,这在我的情况下是不可能的。

到目前为止,我已经尝试过使用 tasklist/taskkill、powershell(Get-Process、Get-Object Win32_Process...),但我还没有找到方法。

这里有 TaskList (Status=Running) 的输出

只有一个任务(前面的那个)显示在那里。

【问题讨论】:

Stop-Process 您的图像显示了任务管理器在其正在运行的父应用程序下对各个任务的分组,这并不意味着它们共享相同的进程标识符。您的 GUI 屏幕截图没有理由成为这个问题的一部分,对我们更有用的是来自 TaskList /V /Fi "Status Eq Running" 的代表性格式化输出。 添加到问题中 你会注意到,你没有显示的那个没有2612PID,正如我已经说过的那样。现在打开命令提示符窗口,输入TaskKill /? 并阅读使用信息。您会注意到,您可以使用图像名称和窗口标题等信息过滤其选择! 如果我尝试使用Taskkill /F /FI "WINDOWTITLE eq ABAP*"它会关闭两个窗口,一个带有 windowtitle ABAP* 的窗口和一个带有 SAP LOGON 740 的窗口。 【参考方案1】:

由于您使用了powershell 标签,甚至使用powerhell.exe 运行了tasklist 命令,我决定提供一个使用它的示例。

如果您的标准是停止名为 saplogon 且窗口标题字符串最长的进程:

GPs saplogon|Sort$_.mainWindowTitle.Length|Select -L 1|SpPs -Wh

如果您的标准是停止所有名为 saplogon 的进程,但窗口标题字符串最短的进程除外:

GPs saplogon|Sort$_.mainWindowTitle.Length|Select -Skip 1|SpPs -Wh`

如果您对输出感到满意,您可以删除  -Wh(-WhatIf),以实际执行任务。如果需要,您甚至可以将其替换为  -F(-Force) 选项,如果需要

【讨论】:

请在您的答案中使用完整的 cmdlet,而不是别名。与其他人共享时,使用 cmdlet 可使代码更加清晰和一致。 (是的,我知道在交互式控制台中使用别名有助于加快速度,但会使代码不太清晰。此外,有些别名不太直观,很难记住所有别名……如果不是 linux极客[咧嘴]...) 我在执行整个命令之前尝试只列出正在获取的内容(不包括选择和 SpP),并且只出现一行。尽管如此,我还是尝试了两者。对于第一个(杀死标题较长的那个),结果是两者都关闭。第二个没有任何反应(我猜这是因为 Skip 1,它跳过了唯一存在的行)。 @iVrLx,我不确定你是否尝试过,因为我不是读心者,而且你没有足够的尊重来提供你的代码的minimal reproducible example,正如指导方针中提到的那样问题。下次遇到问题,请务必不要浪费其他会员的时间和精力,请在发帖前拨打tour 并阅读How to Ask。

以上是关于杀死给定进程的次要任务的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 VBA 代码杀死任务管理器进程?

防止从任务管理器中杀死进程,反转

text 任务杀死taskkill查找进程窗口

Delphi 7 - 防止用户在任务管理器中杀死进程

markdown 杀死节点进程任务服务器liberar puerto

像任务管理器(Windows 8)一样杀死进程,因为访问被拒绝