免费注册 查看新帖 |

Chinaunix

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

UNIX系统编程(10月11号更新 1楼,2楼,11楼,20楼,53楼,54楼) [复制链接]

论坛徽章:
0
1 [报告]
发表于 2006-11-06 09:23 |显示全部楼层
描述得挺细致,支持了!

论坛徽章:
0
2 [报告]
发表于 2006-11-09 10:04 |显示全部楼层
这个问题我也不太清楚,不敢妄言,但我知道至少vfork时应该用_exit()。但一般情况下fork后用exit也没见出什么问题。
这个还是留给高手解答吧

俺不是高手,不过俺多少知道一点fork后用exit的结果,俺也谈谈感想给大家作个参考。

一般情况下,只要子进程把该交代的都交代了,用exit退出就是安全的。原因就是子进程在一个独立的空间中运行,所有的指针和变量都是从父进程复制过来的,它并不造成对父进程的数据覆盖,除非它要操作共享存储器或者修改硬盘文件。exit只对本进程空间进行善后处理。

在C/S情况下,守护程序父进程设置SIGCHLD忽略,fork以后关闭socket回到listen,而子进程运行完毕可以直接exit,没有僵尸进程产生。

在共享数据处理的情况下,父进程要等待子进程的处理结果,那就必须调用wait,只要子进程exit,父进程的wait就解除,不会有僵尸进程产生。

如果open一个文件或socket,而没有关闭它们就退出,那么程序也会产生僵尸。曾经有一位同事在刚进开发组时,写的程序中多次调用fopen而没用fclose,结果程序运行老是报资源耗尽,又不好意思说,查了几天没结果,最后我让他用ps看一下,僵尸进程居然有二十多个,加上其他的用户进程,一个用户的进程配额就迅速耗尽了。这事自然成了大家茶余饭后的笑话,说是只知吃饭,不知拉屎,岂不撑破肚皮。笑话尽管笑话,这事也给大家重新复习了一下某些操作成对调用的必要性,当然这是后话了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP