netstat -a -b
正在报告一个PID为4476的名为System
的进程打开了端口60001,除了不存在PID 4476的进程,至少据我所知。进程浏览器和任务管理器没有列出PID 4476(尽管还有另一个名为
System
的PID 4进程,它具有自己的一组不包含60001的TCP连接)。 taskkill /PID 4476
还报告找不到PID4476。有没有办法杀死这个神秘的System进程,以释放它当前绑定的端口?什么会导致这种情况发生?怎么会有任务管理器,进程资源管理器和taskkill不知道的进程?重新启动设法解决了该问题,但是我想知道是否有一种方法可以在不重新启动的情况下进行修复。
#1 楼
我知道这是一个旧线程,但是如果其他任何人遇到相同的问题,我也可以...可能发生的情况是,您的进程在崩溃或其他情况下打开了TCP端口退出而没有显式关闭它。通常,操作系统会清理这些事情,但仅在过程记录消失时才会清理。尽管该进程似乎不再运行,但至少有一件事情可以对其进行记录,以防止重用其PID。这是不与父进程分离的子进程的存在。
如果您的程序在运行时派生了任何进程,请尝试将其杀死。这将导致释放其过程记录并清理TCP端口。显然,当记录被释放时,windows会这样做,而不是在进程退出时,正如我所期望的那样。
评论
谢谢你,先生。我不敢相信这个答案如此之低,特别是因为Google查询中充满了“使用TCPView /使用netstat和taskkill”的答案,在这种情况下没有帮助。以我为例,帮助运行ProcessExplorer并查找任何孤立的进程是有帮助的。关闭它们可以解决问题。
– gwiazdorrr
2012年6月18日上午9:13
感谢您的提示!杀死孤立进程确实解决了问题。
–黑暗线程
13年5月22日在3:34
谢谢!!这正是发生在我身上的事情。我杀死了孤立的进程,并释放了端口。我不确定如何使用流程浏览器搜索孤立的流程,但我知道生成的流程的名称,因此很容易找到。
–格雷佐
2014年7月16日14:50
我们遇到了同样的问题-使用Process Explorer可以看到Watson博士保留了旧的PID。我们搜索(查找)该服务试图打开的端口,然后看到3-4个Dr.Watson及其正在使用的PID的条目。奇怪的是,我们不必暗中杀死任何东西。好像这个过程“唤醒了它”,它消失了。下次我们尝试重新启动该服务时,它运行正常。
– Tresstylez
2014年11月20日20:47
使用VS进行调试期间,可能会发生类似的问题。我将VS附加到流程中,并且经过一些周期-发生了上述情况,但是我的流程(包括子流程)都没有离开。但是杀死“ vsjitdebugger”会有所帮助。
–德米特里·阿扎拉耶夫(Dmitry Azaraev)
17年7月10日在3:05
#2 楼
以adminC:\ WINDOWS \ system32> netstat -ano |打开命令提示符。 findstr:7895
***重复步骤2,直到不再有子进程
C:\ WINDOWS \ system32> wmic进程,其中(ParentProcessId = 1091)获取Caption,ProcessId
Caption ProcessId
cmd.exe 1328
2.a. C:\ WINDOWS \ system32> wmic进程,其中(ParentProcessId = 1328)获取标题,ProcessId
Caption ProcessId
conhost.exe 1128
2.b。重复此操作直到找不到其他子进程
-然后杀死所有子进程
C:\ WINDOWS \ system32> taskkill / F / PID 1128
成功:PID 9500的过程已终止。
评论
wmic命令是我们设法确定实际上保持端口打开的子进程的唯一方法。非常感谢。
– K Erlandsson
18年11月30日在10:24
这也是我发现解决问题的唯一方法。主进程消失了,子进程处于挂起状态,但仍保持TCP端口处于“侦听”状态。谢谢。
–桂
19 Mar 27 '19在16:06
#3 楼
您是否尝试过使用TCPView并关闭连接?我不知道它是否会在您描述的场景中显示连接,因为我从未发生过这种情况。但这是我唯一想到的,如果再次发生这种情况。流程是什么-是商业软件,还是国产软件?似乎某些木马使用了端口60001-我想知道它是否可能是rootkit或可能对操作系统隐藏的东西?可能想让该机器一次过使用AV,这可能是可引导媒体提供的效果。
评论
不,我们没有尝试TCPView;如果将来再次发生,我会牢记这一点。该软件是我们使用60001端口的内部软件-我几乎可以肯定,将端口保持打开状态的过程是我们软件的先前实例,但并没有完全消失。这阻止了该软件的另一个副本的启动。
–亚当·罗森菲尔德
2010-09-14 14:51
您的应用程序可以在绑定套接字之前将套接字的SO_REUSEADDR选项设置为true。那应该可以解决您的问题(在* nix上或多或少是强制性的)
–斯蒂芬(Stephane)
2010-09-14 15:06
#4 楼
我之前也遇到过同样的问题,netstat -a -n Windows命令给了我带有进程ID的开放端口列表。从那开始,我选择了想要关闭连接的端口号,然后使用TCPView软件关闭了该连接。这对我有用。#5 楼
如果您是Windows用户,请按照以下步骤操作步骤1:转到此路径:控制面板\所有控制面板项目\管理工具
步骤2:单击服务
Step3:停止在所需端口上运行的有害服务。
#6 楼
ps -ef | grep进程名称杀死相关进程
-9 pid pid
以我的情况工作
评论
这个问题是关于Windows,而不是Linux
–长长的脖子
13年2月21日在11:36
评论
您等待了多长时间才能查看端口是否已释放?连接(端口)处于什么状态?建立,关闭,等待时间?@joeqwerty:我们至少等待了15-20分钟。不幸的是,我忘记了连接在= /中处于什么状态。
20分钟听起来像个问题。下次发生时,请运行netstat并检查连接状态,这将为您提供有关正在发生的情况的线索。正如您评论mfinni的答案一样,这可能是软件\服务崩溃的结果。