oracle进程老是与我抢端口,怎么解决?

luck_wei 2010-09-13 03:58:37
我的程序是linux环境下开发的,初始化时启动socket监听23456端口;
初始化完成后使用lsof查看23456端口发现oracle的进程也在监听这个端口;
谁知道什么原因?
...全文
173 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
luck_wei 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 justkk 的回复:]
你的程序中有没有创建子进程?
[/Quote]
justkk 2010-09-16
  • 打赏
  • 举报
回复
或许是看起来子进程监听了那个端口..
子进程有没有调用exec()?
luck_wei 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wjjll123 的回复:]
晕,我以前搞java的时候。也正常这样。oracle总是和我抢端口。我也懒得改oracle用的端口。每次都是在oracle用那个端口之前,我就先占了那个端口。。。。

然后我程序关了就把oracle也关了。。。。。这样就行了。。。。不过治标不治本啊。。。
[/Quote]

这也是个办法,不过挺麻烦的。
luck_wei 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wangjianbo1123 的回复:]
我理解的是不可能两个程序监听同一个端口,如果可以,那么,当有数据来的时候,这两个程序都会收到相应的数据,这个不是乱套了吗?再说了,像oracle这样的进程,不可能监听这个端口的,常用的进程一般都是监听1024以下的端口。 出现你这种情况我觉得有可能是你在退出你的程序后,没有关闭监听的套接字(closesocket())试试看
[/Quote]

确实很难理解这个现象。感觉就像oracle的进程排在你进程的后面,如果你的进程退出后它就马上占了这个端口。但是有意思的是我如果不监听任何端口,它也不做任何操作。

如果直接杀掉进程就无法关闭监听的套接字。
zhanshen2891 2010-09-15
  • 打赏
  • 举报
回复
你也设置端口重用就可以了
wangjianbo1123 2010-09-15
  • 打赏
  • 举报
回复
我理解的是不可能两个程序监听同一个端口,如果可以,那么,当有数据来的时候,这两个程序都会收到相应的数据,这个不是乱套了吗?再说了,像oracle这样的进程,不可能监听这个端口的,常用的进程一般都是监听1024以下的端口。 出现你这种情况我觉得有可能是你在退出你的程序后,没有关闭监听的套接字(closesocket())试试看
wjjll123 2010-09-15
  • 打赏
  • 举报
回复
晕,我以前搞java的时候。也正常这样。oracle总是和我抢端口。我也懒得改oracle用的端口。每次都是在oracle用那个端口之前,我就先占了那个端口。。。。

然后我程序关了就把oracle也关了。。。。。这样就行了。。。。不过治标不治本啊。。。
luck_wei 2010-09-15
  • 打赏
  • 举报
回复
netstat -an|grep 23456查看确实只有一个
但是问题是,如果我的程序退出了端口就被占用了。这个怎么解释?
justkk 2010-09-15
  • 打赏
  • 举报
回复
你的程序中有没有创建子进程?
genlic 2010-09-15
  • 打赏
  • 举报
回复
肯定是你的问题。。。
justkk 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luck_wei 的回复:]
引用 7 楼 justkk 的回复:
你是说你的程序杀掉之前,和oracle同时监听23456端口??

是的,只不过我的程序排在前面。
[/Quote]
哦?同一个端口能同时被两个程序监听?
你用netstat -an|grep 23456看看呢..
luck_wei 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justkk 的回复:]
你是说你的程序杀掉之前,和oracle同时监听23456端口??
[/Quote]
是的,只不过我的程序排在前面。
mengde007 2010-09-13
  • 打赏
  • 举报
回复
设置参数让端口重用。
justkk 2010-09-13
  • 打赏
  • 举报
回复
你是说你的程序杀掉之前,和oracle同时监听23456端口??
luck_wei 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justkk 的回复:]
你的程序退出后,那端口也不是LISTEN状态吧
不影响你的程序使用
[/Quote]

是LISTEN状态
luck_wei 2010-09-13
  • 打赏
  • 举报
回复
整个过程是这样的:

1、程序启动之前23456端口在系统中未被占用
2、程序启动后23456端口(监听成功,可以与其他进程进行通信),此时oracle的进程也监听此端口
3、杀掉程序释放23456端口,但是oracle的进程并不释放
4、再次启动程序时监听23456端口失败
justkk 2010-09-13
  • 打赏
  • 举报
回复
你的程序退出后,那端口也不是LISTEN状态吧
不影响你的程序使用
冻结 2010-09-13
  • 打赏
  • 举报
回复
你去找一个别人不用的端口用。
luck_wei 2010-09-13
  • 打赏
  • 举报
回复
程序中确实使用了oracle数据库,但问题是当我的程序退出以后oracle的进程并不退出依然占有着此端口。
justkk 2010-09-13
  • 打赏
  • 举报
回复
不是吧,应该是你的程序使用了oracle数据库,让lsof看起来是这样子了..

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧