免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mingjwan
打印 上一主题 下一主题

程序退出后,打开的端口仍在listen,怎么办。 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-04-25 10:31 |只看该作者
原帖由 flw 于 2007-4-25 10:28 发表
问题恶化了,现在的问题可以归结为一句话:
系统中出现一个由不知名程序打开的端口(8080),处于 listen 状态,可以正常接受连接请求。

理论上无论谁打开了8080端口。

ps -ef | awk '{print $2}' | xargs pfiles > a.txt命令是可以捕捉到相应的进程信息的。但实际运行结果是没有任何信息。

论坛徽章:
0
52 [报告]
发表于 2007-04-25 10:38 |只看该作者
原帖由 mingjwan 于 2007-4-25 10:19 发表
感谢大家的帮助。针对大家的疑问,我再说明如下:
1. 错误是可以复现的:但是由于整个程序比较复杂,可能简化后就不会再出现了(但是没有做这个工作)。
首先介绍一下异常操作:通过ftp工具给ftp配置文件到程序相应的目录下,同时给程序发送消息,让程序读取配置文件(此时ftp可能没有完成传输工作)。这一个过程我称为异常操作,但是经过此操作后,程序已经正常,没有core,也没有退出。此时需要kill -9 pid杀死程序,然后就会发现8080端口仍在监听。

2. 操作系统是soliars 9,运行sun自己的440服务器。

3. nestat -an| grep "8080" 的结果是:
zxme@zxmexxx1 $ netstat -an | grep "8080"
192.200.51.199.8080        *.*                0      0 49152      0 LISTEN


其实这个问题就是在与大家都以为kill -9 pid就一定100%能够杀死一个进程
既然8080端口仍然在监听,那么毫无疑问的一定是有一个进程在绑定该端口,和该端口关联,至于这个进程是那个应该被杀死而没有被杀死或者是否是另外一个化身,但是从楼主的种种描述上可以肯定的是8080端口在提供服务

建议:使用日志,楼主可以在你的程序代码中简单地输出一条信息到日志文件中,包含时间戳,pid等
daemon程序在bind之后要调用listen,listen之后就要无线循环,等待客户端连接提供服务,你可以在你的循环里加详细的日志信息用来troubleshooting

论坛徽章:
0
53 [报告]
发表于 2007-04-25 10:43 |只看该作者
楼主的帖子也许改名  kill -9 pid 为什么无法杀死一个进程? 更贴切

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
54 [报告]
发表于 2007-04-25 10:44 |只看该作者
to wuqing:

根据他描述的情况,似乎是只能建立连接,并不能提供服务。
建立连接是由 OS kernel 提供的功能,和程序无关。
如果 OS kernel 的确没有关闭 socket 的话,即使应用程序退出了,也是可以建立连接的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
55 [报告]
发表于 2007-04-25 10:46 |只看该作者
或许楼主你可以先得到进程号,
然后等你 kill 之后,再执行
kill -0 pid
看看有什么提示。

论坛徽章:
0
56 [报告]
发表于 2007-04-25 10:48 |只看该作者
原帖由 mingjwan 于 2007-4-25 10:19 发表
感谢大家的帮助。针对大家的疑问,我再说明如下:
1. 错误是可以复现的:但是由于整个程序比较复杂,可能简化后就不会再出现了(但是没有做这个工作)。
首先介绍一下异常操作:通过ftp工具给ftp配置文件到程序 ...



读取配置文件之后是不是又bind了一次,也就是说对8080端口bind了两次

论坛徽章:
0
57 [报告]
发表于 2007-04-25 10:53 |只看该作者
原帖由 deadlylight 于 2007-4-25 10:48 发表
读取配置文件之后是不是又bind了一次,也就是说对8080端口bind了两次

谢谢,端口的配置信息是不可以随便修改的,该配置文件里面记录的是业务服务的配置信息,所有不会出现两次bind。况且两次bind,第二次也是应该不成功的。

论坛徽章:
0
58 [报告]
发表于 2007-04-25 10:55 |只看该作者
原帖由 flw 于 2007-4-25 10:44 发表
to wuqing:

根据他描述的情况,似乎是只能建立连接,并不能提供服务。
建立连接是由 OS kernel 提供的功能,和程序无关。
如果 OS kernel 的确没有关闭 socket 的话,即使应用程序退出了,也是可以建立连接 ...


谢谢版主的解释,我一直有这样的怀疑。异常后的8080端口是可以接受包,但是没有业务成的响应,所有tcp层的响应都是有内核完成的。与程序无关。

论坛徽章:
0
59 [报告]
发表于 2007-04-25 10:56 |只看该作者
如果普通用户能创建一个隐藏的进程,root也无法关闭,那这样的操作系统也太不安全了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
60 [报告]
发表于 2007-04-25 10:57 |只看该作者
原帖由 mingjwan 于 2007-4-25 10:55 发表

谢谢版主的解释,我一直有这样的怀疑。异常后的8080端口是可以接受包,但是没有业务成的响应,所有tcp层的响应都是有内核完成的。与程序无关。

看 56 楼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP