0

当我想从 Linux 的进程列表中杀死这个进程并想再次运行它时,我在我的 Ubuntu 11 中使用 C++ 开发了一个模拟器程序,我遇到了这个错误:

Error initializing sockets: port=6000. Address already in use

我使用 lsof 命令查找进程的 PID:

saman@jack:~$ lsof -i:6000
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rcssserve 8764 saman    3u  IPv4  81762      0t0  UDP *:x11

之后我试图杀死 8764 的 PID。但它仍然有错误。我该如何解决?

4

2 回答 2

2

我认为您遇到的问题是套接字如果没有正确关闭,那么它仍然被保留并等待内核关闭超时。

尝试做一个netstat -nutap,看看是否有这样的一行:

tcp        0      0 AAA.AAA.AAA.AAA:6000     XXX.XXX.XXX.XXX:YYYY       TIME_WAIT   -

如果是这种情况,您只需要等到内核丢弃它(大约 30 秒),直到您可以在 6000 处打开套接字而不会发生冲突

于 2012-04-23T23:50:04.843 回答
0

看起来端口 6000 被 X 窗口系统(Linux 的 GUI 部分)使用,并且在您终止进程时可能刚刚重新启动......您需要在没有运行 X 窗口的情况下运行模拟,或者您进行调整使用不同端口的代码..

于 2012-04-23T23:37:57.800 回答