我的一位同事最近遇到了一个问题,据称已死亡的进程仍然绑定到网络端口,从而阻止其他进程绑定到该端口。具体来说,netstat -a -b正在报告一个PID为4476的名为System的进程打开了端口60001,除了不存在PID 4476的进程,至少据我所知。

进程浏览器和任务管理器没有列出PID 4476(尽管还有另一个名为System的PID 4进程,它具有自己的一组不包含60001的TCP连接)。 taskkill /PID 4476还报告找不到PID4476。

有没有办法杀死这个神秘的System进程,以释放它当前绑定的端口?什么会导致这种情况发生?怎么会有任务管理器,进程资源管理器和taskkill不知道的进程?重新启动设法解决了该问题,但是我想知道是否有一种方法可以在不重新启动的情况下进行修复。

评论

您等待了多长时间才能查看端口是否已释放?连接(端口)处于什么状态?建立,关闭,等待时间?

@joeqwerty:我们至少等待了15-20分钟。不幸的是,我忘记了连接在= /中处于什么状态。

20分钟听起来像个问题。下次发生时,请运行netstat并检查连接状态,这将为您提供有关正在发生的情况的线索。正如您评论mfinni的答案一样,这可能是软件\服务崩溃的结果。

#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 楼

以admin


C:\ 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