僵死进程问题...

发布于 2022-07-23 15:21:49 字数 344 浏览 6 评论 7

在做一个服务器程序,要求每秒能接受很多的并发连接
我的处理方式是:主进程LISTEN,ACCEPT后FORK子进程进行处理,主进程继续LISTEN

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

少女净妖师 2022-07-28 06:14:23

双 fork(),没有同时运行 strace 吧?

哑剧 2022-07-28 06:13:48

waitpid只是在响应子进程退出的信号的时候调用就可以了

深府石板幽径 2022-07-28 05:41:16

原帖由 realpeter 于 2006-10-26 19:59 发表
在做一个服务器程序,要求每秒能接受很多的并发连接
我的处理方式是:主进程LISTEN,ACCEPT后FORK子进程进行处理,主进程继续LISTEN

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

至少,waitpid可以不阻塞调用

久伴你 2022-07-28 03:59:01

原帖由 zengg82 于 2006-11-1 09:37 发表
你是怎么结束子进程的阿?

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

你试一试。

...

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

世俗缘 2022-07-27 22:19:04

创建子进程后,在子进程中关闭倾听套接字,父进程关闭连接套接字
然后子进程自己exit就行了

缺⑴份安定 2022-07-27 18:43:46

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

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

勿忘心安 2022-07-27 13:11:02

你是怎么结束子进程的阿?

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

你试一试。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文