小编kto*_*orn的帖子

释放OS X上死进程使用的UDP端口

我在OS X 10.11.6上并尝试运行一个通常8008在启动时侦听UDP端口的程序.

此程序通常还会在其操作期间生成几个辅助子进程,但该端口由父进程绑定.

不幸的是,退出程序时,即使程序(父级+子级)不再存在,有时端口仍保持打开状态.

当发生这种情况时,如果我再次尝试运行该程序,它自然会失败并出现EADDRINUSE错误,在这些情况下无论我尝试什么,我发现的唯一解决方案是重启机器.

我很难相信我不能在没有重启的情况下释放端口.

这是我到目前为止运行的一些诊断(我运行和运行所有这些sudo):

查找使用端口的进程8008lsof:

$ lsof -i -n -P | grep UDP | grep 8008
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,没有任何结果.

但是,我有更多运气netstat:

$ netstat -tulnvp udp | grep 8008
udp4  0  0  *.8008    *.*    196724   9216  47205   0
Run Code Online (Sandbox Code Playgroud)

所以,端口确实是绑定的,罪魁祸首是pid 47205,但是:

$ ps aux | grep 47205
Run Code Online (Sandbox Code Playgroud)

不归还任何东西.对于PID 4720647207(最确定的是分配给孩子们的PID)也是如此.我还尝试过grep(程序名称,路径等)的其他变体.

我还寻找任何流程报告47205作为其父级:

$ ps -axo pid,ppid,command | grep 47205
Run Code Online (Sandbox Code Playgroud)

所以孩子们的过程也显然已经死了.

无法做kill任何事情,我尝试了SIGHUP …

sockets macos osx-elcapitan

28
推荐指数
1
解决办法
2622
查看次数

标签 统计

macos ×1

osx-elcapitan ×1

sockets ×1