也许你正在远程Windows服务器上愉快地工作,突然发现一个进程运行失控,占用了宝贵的CPU周期。你会怎么做?终止它!
在这个教程中,你将学到如何使用本机实用工具、第三方工具和PowerShell来终止Windows进程。首先,你将学会如何检查Windows中正在运行的进程,然后终止这些进程。
先决条件
如果你想按照本教程的步骤操作,请确保事先准备好以下内容:
- A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
- A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
- 来自Microsoft的Sysinternals套件。
- Windows PowerShell 5或更高版本。本教程使用PowerShell v7.1.3
使用Tasklist查询远程Windows进程
自Windows XP以来,就有一个有用的工具叫做tasklist。Tasklist是一个方便的工具,可查询远程计算机上的进程。在终止进程之前,你必须先找到它们!
在桌面上打开PowerShell会话或命令提示符,键入以下命令以显示远程计算机上的所有运行进程。
下面的命令查询远程计算机(/S
),通过管理员用户名(/U
)和密码(/P
)进行身份验证。
您会发现下面会话名称未显示。因为您在远程计算机上运行tasklist
,tasklist
不提供会话名称。

也许您更喜欢仅列出单个进程。没问题。为此,请指定/FI
参数。/FI
参数接受查询,该查询将传递给tasklist
以筛选特定进程。

使用PSList查询远程Windows进程
查看运行进程的另一个工具是PSList,这个实用程序是Sysinternals套件的一部分。这套工具已经存在多年,由Azure的首席技术官Mark Russinovich创建!
让我们开始学习如何在远程计算机上查看运行进程。
1. 在您的桌面上打开一个PowerShell会话或命令提示符,并将目录更改为您提取Sysinternal Suite的位置。
2. 在您的PowerShell会话中,运行以下命令以显示远程计算机上运行的进程以及实时关联的CPU使用情况。
以下命令在WIN-BANGJIEFNOC
计算机上以Administrator
用户名(-u
)和密码(-p
)进行身份验证,运行pslist
以查询所有远程Windows进程。
该命令使用-s
开关将pslist
切换到“任务管理器模式”,以重复更新列表。
如果这是您第一次使用Sysinternals工具,可能会出现一个横幅,询问您是否接受EULA;点击确定。
现在,您会看到运行该命令后的以下输出;对于本文,您关注这些值中的3个。如下所示。
- 名称:进程的名称。
- Pid:进程标识符,本教程中使用的关键值,PID号码可用于终止远程进程。它是分配给进程的数字标识符。
- CPU:这显示了您整体可用CPU的近实时利用率。
其他值与内存相关,超出了本文的范围。

3.由于第二步使用了-s
开关,请按Ctrl-C退出pslist
以返回到控制台。
通过使用
-e
开关,后跟进程名称,缩小由pslist
返回的进程列表,例如-e Winlogon
。
使用 PSKill 按进程名称终止进程
一旦您知道如何查找远程进程,现在让我们深入了解如何终止它们。首先,让我们介绍一下 pskill 实用程序。首先,学习如何按进程名称终止进程。
1. 确保您在远程服务器上有一个可以终止的进程。本教程将使用记事本进程。
2. 在本地桌面上打开 PowerShell 会话或命令提示符,并将目录更改为您提取 Sysinternal Suite 的位置,然后运行以下命令。您可以看到 pskill
的语法与 pslist
类似。

3. 现在,运行 pslist
,如前一节所述,以确认进程确实已停止。

使用 PSKill 按进程 ID 终止进程
按名称终止进程可能足够满足您的需求,如果只有一个该进程的实例正在运行,或者您想终止所有具有该名称的进程。如果您要终止正在运行的进程的特定实例呢?以下步骤将演示此过程。
1. 在您的远程服务器上,打开记事本两次;您将在此演示中终止其中一个进程;当然,您也可以替换其他进程。
2. 运行以下命令,请注意下面显示的一个 Pid,您需要用它来执行下一步。

3. 使用PID,现在运行 pskill
,将PID作为最后一个参数提供。

4. 最后,通过重新运行 pslist
检查是否仍然有一个 Notepad 实例在运行。现在你应该只能看到一个 Notepad 实例在运行。

使用 TaskKill 按名称终止远程Windows进程
taskkill 实用程序是 Windows 的本机工具,还包括通过用户名和应用程序名称重新启动进程的其他命令行选项。让我们开始并再次终止 Notepad!
按名称终止进程
1. 在远程服务器上打开 Notepad;在此演示中,您将终止 Notepad 进程;当然,您可以替换为其他进程。
2. 在桌面上打开 PowerShell 会话或命令提示符。键入以下命令将终止 notepad.exe
输出如下所示:
/IM 是 Image 的参数;在这种情况下,它是 notepad.exe

3. 为确认进程是否已停止,运行 tasklist
。现在,您应该看不到匹配该筛选器的任务。

通过PID使用 TaskKill 终止远程Windows进程
使用 PID 使用 taskkill
终止进程与使用进程名称并无太大区别。但是,由于不能使用名称,您首先需要找到 PID,然后将其传递给 taskkill
。
假设您的远程 Windows 主机上有 Notepad 运行:
1. 运行如下所示的tasklist
命令来查找记事本进程的PID。记下其中一个PID,如下所示;你需要它来进行下一步操作。

2. 现在,运行taskkill
并将PID作为最后一个参数提供。

3. 最后,运行tasklist
来确认进程是否已停止。

使用PowerShell终止远程Windows进程
PowerShell为您提供了几个终止远程进程的选项;第一个命令Stop-Process
不能直接终止远程进程,因为它没有指定计算机名称的选项。但是,您可以通过PowerShell远程远程运行Stop-Process
来解决此问题。
1. 如果您的主机和远程服务器不在活动目录域中,请首先提供用户名和密码,创建一个PSCredential对象。

2. 接下来,由于本教程将使用SSL连接到远程计算机并使用自签名证书,创建一个PSSessionOption,该选项将跳过受信任证书颁发机构的证书检查。
3. 现在,使用Enter-PSSession
命令连接到服务器,该命令将在远程服务器上建立一个交互式会话。
下面的命令是连接到WIN-BANGJIEFNOC.local.net
计算机,使用上面提供的用户名和密码(Credential
),跳过证书颁发机构的检查(SessionOption
),并通过SSL连接(UseSSL
)。

4. 连接到远程主机后,通过运行Get-Process
检查要终止的进程。在本例中,您将看到notepad
进程。

5. 要终止此进程,请运行Stop-Process
,如下所示。
6. 最后,通过重新运行Get-Process
确认您已终止该进程,您应该会收到错误消息。

如果您想非交互地停止远程Windows进程,请使用
Invoke-Command
命令 使用以下参数:Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL
。将Stop-Proces
命令封装在ScriptBlock
参数中将命令发送到远程主机。
结论
你已经了解了关于终止远程进程的不同方法,以及如何克服网络防火墙规则可能阻止实用程序正常工作的情况;本教程还可能帮助你解决了Windows的一些问题。
你所学到的实用程序是强大的工具,请谨慎使用!
Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/