在进行 Web 开发时,我有一个进程会定期挂起。
我想用 PowerShell 脚本杀死它。
据我所知,netstat
命令似乎返回一个字符串,而不是具有易于访问属性的友好对象。在我的阅读中,我还没有找到一个电源外壳友好的替代品,尽管我对一个持开放态度。
function killport($port) {
// How do I capture the $PID from here?
netstat -ao | findstr $port
write-host Taskkill /PID $pid
sleep 5
write-host Taskkill /PID $pid /f
}
示例运行:
netstat -ao | findstr 51135
TCP 127.0.0.1:51135 r151:51135 ESTABLISHED 7968
最佳答案
假设您只会得到一个结果(这似乎是可能的),您可以使用一个简单的正则表达式来捕获该行的最后一组数字。
$netstat = "TCP 127.0.0.1:51135 r151:51135 ESTABLISHED 7968";
$PortNumRegex = [regex]"(\d+)$";
$portnum = $PortNumRegex.Match($netstat);
$portnum.captures[0].Value;
在您的情况下,将 $netstat
行替换为 netstat -ao | findstr 51135
;您还可以通过 select-string
或其他正则表达式匹配运行 netstat -ao
的输出来消除 findstr 51135
,但对于像这样的简单情况这个,上面的应该可以正常工作。
关于parsing - 仅捕获 `PID` 中的 `netstat` 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25342782/