如何终止运行给定可执行文件的进程?

问题描述 投票:0回答:2

我想辞掉一份工作。首先,我需要它的进程 ID,所以我执行:

get-process

我得到了大量的流程。好的,我只想要一个特定的过程,所以我使用:

get-process | select-string -pattern "nginx"

这给了我这个对象:

System.Diagnostics.Process (nginx)

我该怎么办?我怎样才能漂亮地打印它,以便在我请求所有进程时得到与我得到的相同的输出行?当我 grep 给定的执行过程时,我基本上只是想要这个:

166      11     2436       8244       0.13  24196   1 nginx                                                        
powershell process kill
2个回答
4
投票

Select-String
可能不是您想要用于此特定钉子的锤子(见下文):-)

Get-Process
有一个
-Name
参数,该参数采用通配符:

Get-Process -Name nginx
# or
Get-Process -Name *nginx*

要终止进程,请直接在对象上调用

Kill()

$nginxProcess = Get-Process nginx |Select -First 1
$nginxProcess.Kill()

...或者简单地将流程实例通过管道传输到

Stop-Process
:

Get-Process -Name nginx |Stop-Process

如您所见,我们实际上不需要定位或传递进程 ID -

Process
对象已经嵌入了该信息,并且
*-Process
cmdlet 被设计为 协同工作 - PowerShell 就是这样命令composition,这是一个例子。

话虽这么说,

Stop-Process
也完全有能力仅通过名称来杀死进程:

Stop-Process -Name nginx

我怎么知道
*-Process
cmdlet 有
-Name
参数?

除了阅读 帮助文件和文档(我明白了,我也不想读任何东西,除非我绝对必须这样做;-)),了解 cmdlet 公开的参数的快速方法是通过运行

Get-Command <commandName> -Syntax
:

PS ~> Get-Command Stop-Process -Syntax

Stop-Process [-Id] <int[]> [-PassThru] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]

Stop-Process -Name <string[]> [-PassThru] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]

Stop-Process [-InputObject] <Process[]> [-PassThru] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]

输出向我们展示了 3 个不同的“参数集”(命令接受的参数输入的组合),以及我们可以传递给它的必需和可选参数。


Select-String
有什么问题吗?

Select-String
cmdlet 是与
grep
同源的 PowerShell - 它需要一些输入,并根据您提供的任何模式对其执行正则表达式匹配。

但是

grep
仅当您在 strings 上操作时才有用 - 正如您已经发现的,
Get-Process
返回结构化 .NET 对象,而不是平面字符串。

相反,PowerShell 惯用方法是使用 Where-Object cmdlet

过滤
数据:

Get-Process | Where-Object Name -like '*nginx*'

这里,我们指示

Where-Object
仅允许具有
Name
属性的对象,该属性的值必须满足通配符模式
*nginx*

Where-Object
还支持 任意过滤表达式,通过接受脚本块 - PowerShell 会将当前正在计算的管道对象分配给
$_
(和
$PSItem
):

Get-Process | Where-Object { $_.Name -like '*nginx*' }

...您可以将其扩展到您需要的任何程度:

# Only let them through if a specific user is executing
Get-Process | Where-Object { $_.Name -like '*nginx*' -and $env:USERNAME -ne 'Quarkly'}

0
投票

杀死具有已知 PID 的进程:

语法:

Stop-Process -Force -Id <pid>

示例:

Stop-Process -Force -Id 1234

终止已知名称的进程:

语法:

Stop-Process -Force -Name <name>

示例:

Stop-Process -Force -Name Taskmgr
© www.soinside.com 2019 - 2024. All rights reserved.