批处理杀掉所有java进程_如何最好通过具有批处理脚本的WINDOWS中的端口80杀死CLOSE_WAIT状态进程...

摘要:

流氓Java进程因停留已停止的服务而阻止了服务返回。

停止Java服务有时不会杀死Java进程,它会无休止地将其锁定在CLOSE_WAIT状态,因此当服务尝试返回时IP上仍在使用端口80,因此该服务无法启动

进行netstat -ano返回IP / PORT组合的PID,然后可以手动将其终止。 我想避免自己这样做。 我想在我们的服务重启脚本中添加一个部分,该部分将杀死处于CLOSE_WAIT状态的任何端口80进程。

我可以在Linux中轻松完成此操作:

$ netstat -anp |\

grep ':80 ' |\

grep CLOSE_WAIT |\

awk '{print $7}' |\

cut -d \/ -f1 |\

grep -oE"[[:digit:]]{1,}" |\

xargs kill

但是我的Windows批处理脚本技能相当差。

任何人都可以协助完成此任务的Windows吗?

听起来好像并没有真正杀死Java进程,也不是端口问题...

在这里,您可以使用一些东西(将其作为.bat运行):

echo off

netstat -ano | find"127.0.0.1:80" | find"CLOSE_WAIT"> out.txt

FOR /F"tokens=5 delims=" %%I IN (out.txt) DO (

TASKKILL %%I

)

del out.txt

可以将其作为单个命令来完成(没有.bat文件),但是我认为这更具可读性。

更新

对上面显示的脚本进行了改进,可以通过在管道的simbol(|)之前使用单引号和插入号(^)将管道命令括在for循环中来避免使用临时文件:

FOR /F"tokens=5 delims=" %%I IN (

'netstat -ano ^| find"127.0.0.1:80" ^| find"CLOSE_WAIT"'

) DO (

taskkill /PID %%I

)

for / F命令的帮助对其进行了更好的解释:

Finally, you can use the FOR /F command to parse the output of a command. You do this by making the file-set between the parenthesis a back quoted string. It will be treated as a command line, which is passed to a child CMD.EXE and the output is captured into memory and parsed as if it was a file. So the following example:

FOR /F"usebackq delims==" %i IN (set) DO @echo %i

将这个答案归功于插入符号解决方案

好的,我会试一试。 看起来很有希望。 有没有机会在没有输出文件的情况下执行此操作...?

查看答案更新:)

作品。 非常感谢。

我在端口8020上找到终止进程:C: Users stas> netstat -ano | 找到" 127.0.0.1:80" | 找到" CLOSE_WAIT" TCP 127.0.0.1:8020 127.0.0.1:21364 CLOSE_WAIT 10104 TCP 127.0.0.1:8020 127.0.0.1:21368 CLOSE_WAIT 10104 C: Users stas> taskkill / PID 10104错误:找不到进程" 10104" 。 问题是什么?

@Stan Zeez,您可以发表一个新问题吗? 很难读取像这样写的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值