我遇到过这样的情况:我终止了一个进程,但重新启动它时,出现错误Address already in use
。
我正在运行sudo netstat -lntp
以获取进程 ID,它会返回,例如:
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN 475/valhalla_servic
然后我跑sudo kill -9 475
运行此命令后,netstat
不再显示该进程,但是当我尝试重新启动时,我收到“地址已在使用”错误,我不确定我做错了什么?
答案1
我不确定我做错了什么?
好消息:没什么。
TCP 状态机有超时条件。因此,默认情况下,端口会停留一段时间。
作为某些软件的用户,您对此无能为力 - 不让任意软件立即重新绑定端口最终也是一项安全功能。
作为软件的开发人员,您可以设置SO_LINGER
为 0。在大多数情况下,这不是正确的做法——尤其是当您确实终止了拥有进程时。