我最终处于 TCP 端口处于监听模式但未分配任何进程的情况。
有没有办法在不重新启动服务器的情况下关闭此端口?
检查端口状态:
me> netstat -tan | grep 8888
tcp 0 0 :::8888 :::* LISTEN
寻找负责流程:
me> lsof -i -P | grep 8888
上述命令没有返回任何内容
答案1
尝试netstat -ltpn | grep 8888
答案2
运行
fuser 8888/tcp
这应该列出端口上运行的 pid。
答案3
你描述的是一个不可能的情况。
我认为前面的发帖者忽略了这样一个事实:你正试图将一个端口映射到一个不属于你的进程。因此,你lsof
不会返回任何结果,因为这些工具没有权限查看/proc
有助于该端口 -> PID 映射的条目。你的netstat
命令也缺少 -p 标志。运行这些命令,然后root
事情就会清楚得多。
答案4
这sudo lsof -i tcp:8888
如果 netstat 只是进程名称的破折号,则页面建议运行。
就我而言,它最终归属于僵尸过程很奇怪,我知道。
$ sudo lsof -i tcp:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
my-proc-name 38116 root 16u IPv6 326070554 0t0 TCP *:8888 (LISTEN)
然后您可以在“ps”输出中查找 38116(在本例中)来查看已停止的进程。
ps -ef grep 38116
root 38116 1 0 Apr24 ? 00:06:58 [my-proc-name] <defunct>
(我猜它是某种还没有清理的僵尸进程?)。
其他选项:
sudo ss -apn | grep 8888