经过测试,应该可以在Windows 10或Windows Server 2016上使用PowerShell 5.但是,我想它应该也适用于安装了PowerShell 5的旧版Windows .
这是一个例子:
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
14 回答
这是一个让你入门的命令:
如果您对批处理文件有信心,请删除
@ECHO
.请注意,对于不同的操作系统,您可能需要稍微更改一下 . 例如,在Windows 7上,您可能需要
tokens=5
而不是tokens=4
.How this works
这使您可以执行
command
,并循环其输出 . 每一行都将填入%variable
,并且可以随时随地在otherCommand
中展开,无论你喜欢什么 . 实际使用中的%variable
只能有一个单字母的名称,例如%V
.这允许你按空格分割每一行,并取出该行中的第4个块,并将其填入
%variable
(在我们的例子中,%%P
) .delims
看起来是空的,但这个额外的空间实际上很重要 .只需运行它就可以找到答案 . 根据命令行帮助,它“显示所有连接和侦听端口 . ”,“以数字形式显示地址和端口号 . ”和“显示与每个连接关联的拥有进程ID” . 我只是使用这些选项,因为别人建议它,它碰巧工作:)
这将获取第一个命令或程序的输出(
netstat
)并将其传递给第二个命令程序(findstr
) . 如果直接在命令行中使用它,而不是在命令字符串中,则使用|
而不是^|
.这会过滤传递给它的任何输出,只返回包含
:8080
的行 .这会使用进程ID终止正在运行的任务 .
这在批处理文件中是必需的 . 如果在命令提示符下执行此操作,则应使用
%P
.打开命令提示符并运行以下命令
,这里3116是进程ID
要在命令行上查找特定进程,请使用以下命令:8080是进程使用的端口
杀死进程使用下面命令21424是进程ID
使用Merlyn的解决方案导致其他应用程序像firefox一样被杀死 . 这些进程使用相同的端口,但不是作为监听器:
例如:
因此,可以通过向findstr添加“LISTENING”来排除这些,如下所示:
要列出在端口8080上运行的所有进程,请执行以下操作 .
然后杀死进程运行以下命令
谢谢大家,只是添加一些进程不会关闭,除非/ F强制开关也与TaskKill一起发送 . 同时使用/ T开关,将关闭进程的所有辅助线程 .
对于服务,有必要获取服务的名称并执行:
查看正在侦听端口的进程:How can you find out which process is listening on a port on Windows?
杀了它:Any way to write a Windows .bat file to kill processes?
刚完成:
我想杀死连接到特定端口但不是进程侦听的所有进程
端口9001的命令(在cmd shell中)是:
findstr :
r用于表达式,c用于精确链匹配 .
[] *用于匹配空格
netstat :
a - >全部
n - >不解决(更快)
o - > pid
它的工作原理是因为netstat打印出源端口然后打印出目标端口然后打开ESTABLISHED
如果要杀死正在侦听端口8080的进程,可以使用PowerShell . 只需将Get-NetTCPConnection cmdlet与Stop-Process结合使用即可 .
经过测试,应该可以在Windows 10或Windows Server 2016上使用PowerShell 5.但是,我想它应该也适用于安装了PowerShell 5的旧版Windows .
这是一个例子:
与Merlyn的回应类似,但这个也处理了这些情况:
端口号实际上是您不想要的另一个较长端口号的左子串 . 你想搜索一个 exact 端口号,这样你就不会杀死一个随机的,无辜的进程!
脚本代码需要能够运行多次并且每次都是正确的,而不是显示较旧的错误答案 .
这里是:
脚步:
转到 apache tomcat 服务器的
conf
文件夹 . 在我的case,它apache-tomcat-7.0.61\conf
因为我正在使用apache-tomcat-7.0.61打开
server.xml
并根据需要将端口号从8080更改为任何其他端口 . 例如:8081,8082,8087等现在转到
bin
文件夹并运行shutdown.bat
现在通过eclipse重启服务器 .
现在您的项目可以正常运行而不会中断 .
如果有人在寻找Powershell脚本:
此函数基本上执行上述函数的功能,但它采用Powershell脚本格式,因此您可以将其添加到Powershell配置文件中 . 要查找您的 Profiles 的位置,请转到PowerShell并输入
echo $profile
将其粘贴到命令行中
如果你想在批量pu
%%P
而不是%P
中使用它如果你是系统你不能结束它的任务 . 试试这个命令
x:> net stop http / y