免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1292 | 回复: 7
打印 上一主题 下一主题

僵死进程问题... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-26 19:59 |只看该作者 |倒序浏览
在做一个服务器程序,要求每秒能接受很多的并发连接
我的处理方式是:主进程LISTEN,ACCEPT后FORK子进程进行处理,主进程继续LISTEN

问题是服务器主进程要一直运行,以保证监听,
这样它FORK的子进程运行结束后,会变成僵死进程

试过的处理方式
1.主进程WAIT,WAITPID....问题是这种方法会使主进程阻塞,使服务器监听效率大大降低
2.signal(SIGCHLD,SIG_IGN)...不大起作用
3.<UNIX高级编程>中的双FORK方法...还是不起作用

我用的REDHAT9.0,VIRTUAL PC虚拟机

论坛徽章:
0
2 [报告]
发表于 2006-11-01 09:37 |只看该作者
你是怎么结束子进程的阿?

如果用exit(0),我想可能发生僵死,你改用_exit(0);
因为如果用exit(0)的话父进程也会被杀掉,这样就会出现僵死,但用_exit(0)就只杀掉子进程而不会杀掉父进程。

你试一试。

还有你用信号的话,SIG_IGN是父进程忽略此信号,所以还是会发生僵死的,你可以写一个函数扑捉此信号然后处理它,使父进程不会因此而中止而导致其他子进程僵死。

论坛徽章:
0
3 [报告]
发表于 2006-11-01 10:04 |只看该作者
还有你用信号的话,SIG_IGN是父进程忽略此信号,所以还是会发生僵死的,你可以写一个函数扑捉此信号然后处理它,使父进程不会因此而中止而导致其他子进程僵死。

不会的,只要子进程使用exit()调用退出就行。记住和父进程有关的所有描述符都必须关闭。

论坛徽章:
0
4 [报告]
发表于 2006-11-27 13:27 |只看该作者
创建子进程后,在子进程中关闭倾听套接字,父进程关闭连接套接字
然后子进程自己exit就行了

论坛徽章:
0
5 [报告]
发表于 2006-11-28 11:41 |只看该作者
原帖由 zengg82 于 2006-11-1 09:37 发表
你是怎么结束子进程的阿?

如果用exit(0),我想可能发生僵死,你改用_exit(0);
因为如果用exit(0)的话父进程也会被杀掉,这样就会出现僵死,但用_exit(0)就只杀掉子进程而不会杀掉父进程。

你试一试。

...

知之为知之,不知为不知,在自己还没有明白之前,请不要误导别人

论坛徽章:
0
6 [报告]
发表于 2006-11-28 11:49 |只看该作者
原帖由 realpeter 于 2006-10-26 19:59 发表
在做一个服务器程序,要求每秒能接受很多的并发连接
我的处理方式是:主进程LISTEN,ACCEPT后FORK子进程进行处理,主进程继续LISTEN

问题是服务器主进程要一直运行,以保证监听,
这样它FORK的子进程运行结束后,会 ...

至少,waitpid可以不阻塞调用

论坛徽章:
0
7 [报告]
发表于 2006-11-29 19:26 |只看该作者
waitpid只是在响应子进程退出的信号的时候调用就可以了

论坛徽章:
0
8 [报告]
发表于 2006-11-29 20:03 |只看该作者
双 fork(),没有同时运行 strace 吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP