我推出了一个模拟器程序,它在我的Ubuntu 11中用C ++开发,当我想要从Linux的进程列表中删除这个进程并想再次运行它时,我遇到了这个错误:
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。但仍然有错误。 我该如何解决?
答案 0 :(得分:2)
我认为您遇到的问题是套接字如果没有正确关闭,那么它仍然保留并等待内核关闭超时。
尝试执行netstat -nutap
并查看是否有这样的行:
tcp 0 0 AAA.AAA.AAA.AAA:6000 XXX.XXX.XXX.XXX:YYYY TIME_WAIT -
如果是这种情况,你只需要等到内核掉线(大约30秒),直到你可以在没有冲突的情况下打开套接字
答案 1 :(得分:0)
似乎端口6000被X窗口系统(linux的GUI部分)使用,并且当你终止进程时可能刚刚重新启动...要么你需要在没有运行X-windows的情况下运行模拟,或者你调整代码以使用不同的端口..