Arm*_*and 12 windows kill process
我会多次重复这个过程。我必须在 Windows 机器上杀死一个进程,我只知道它的端口。通常步骤如下: 通过查看端口(例如端口 8084)找到 PID 列出在端口上运行的进程
netstat -a -o -n
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令终止该端口上的进程
taskkill /F /PID <pid>
Run Code Online (Sandbox Code Playgroud)
有没有像管道或类似的东西,我可以在 Windows 操作系统上使用它在一行中运行这个命令!?
Ric*_*ard 12
我可以在 Windows 操作系统上使用管道或类似的东西在一行中运行此命令吗?
无论cmd.exe
和PowerShell支持管道从一个命令到另一个。在 PowerShell 中类似(这应该在命令行上的一行中,或者使用 ` 来转义脚本中的换行符):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
Run Code Online (Sandbox Code Playgroud)
在哪里:
Select -skip 4
跳过前四个标题行。(Select
是Select-Object
用于执行 SQL SELECT 之类的对象项目的缩写。%
是对管道中的Foreach-Object
每个对象($_
)执行一个脚本块并将脚本块的结果输出到管道的缩写。在这里,它首先将输入分解为一个字段数组,然后创建一个具有两个属性Original
的新对象,即字符串来自netstat
和Fields
刚刚创建的数组。?
是Where-Object
基于脚本块结果的过滤器的简称。这里匹配第二个字段末尾的正则表达式(所有 PowerShell 容器都基于零)。(除最后一个元素外都经过测试:我不想开始杀死进程:-))。
在实践中,我会简化这一点,例如。只返回 0 或第一个的 PID foreach
(这将被设计为忽略标头)并在调用taskkill
. 如果不了解 PowerShell,这会更快地输入但更难遵循。