免费注册 查看新帖 |

Chinaunix

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

linux系统的严重问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-22 11:23 |只看该作者 |倒序浏览
最近发现linux系统可能存在一个严重问题。
我们都知道,linux只能 fork进程,就是说,所有进程全是复制出来,然后exec得到的。
这就产生一个问题,一个占用很大内存的进程,如果想使用system调用一个很小的程序,也会失败。
因为,system也是先fork,然后exec,因为自己内存很大,fork就失败了,因此后面也不能继续,虽然只是调用一个很小的程序。
这可能是linux的先天缺陷。
如何解决呢?

论坛徽章:
0
2 [报告]
发表于 2007-11-22 11:51 |只看该作者
用vfork就可以了.

论坛徽章:
0
3 [报告]
发表于 2007-11-22 11:53 |只看该作者
fork是COW即copy on write,就是说写时复制的. 你fork了一个进程之后, 只要父子进程不往地址空间里面写, 是暂时不会复制的. 主要还是为了fork的效率.
另一方面, 你每个进程都有4G的运行空间, fork了之后, 子进程也有其地址空间. 同样为4G. 即使你一个进程用到了很大的内存, 但是操作系统会将一些暂时不用的页面交换出去, 放到swap交换设备上去, 通常为磁盘. 以保证你的内存中有足够的内存可供分配.

论坛徽章:
0
4 [报告]
发表于 2007-11-22 11:55 |只看该作者
原帖由 mymtom 于 2007-11-22 11:51 发表
用vfork就可以了.


vfork尽量不用, 它很多方面都是未定义的. 会不同的系统上可能会出现不一样的结果.

论坛徽章:
0
5 [报告]
发表于 2007-11-22 12:11 |只看该作者
vfork是暂时不复制内存,是必须和exec搭配使用的,这个很不方便。

论坛徽章:
0
6 [报告]
发表于 2007-11-22 12:19 |只看该作者
原帖由 yaoaiguo 于 2007-11-22 12:11 发表
vfork是暂时不复制内存,是必须和exec搭配使用的,这个很不方便。


vfork,fork都是暂时不复制内存, 但是vfork之后的子进程是与父进程在同一个空间里,改变子进程的变量父进程也会跟着变化,而如果是fork的话,只要你要改变一个变量的值, 就会进行内存的复制, 此时改变子进程的变量的值对其父进程没有影响 .

评分

参与人数 1可用积分 +15 收起 理由
sakulagi + 15 鼓励Scutan最近的积极发帖

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2007-11-22 12:42 |只看该作者

回复 #6 scutan 的帖子

就是说vfork出来的进程和原进程还是紧密相关,很容易出错,所以vfork必须和exec搭配使用才能体现出来优点。
如果我有一个很大的进程,想 fork出来一个干点杂事,是不能用vfork的。
不知道system用的是哪个?按理说应该用vfork才对。

论坛徽章:
0
8 [报告]
发表于 2007-11-22 12:53 |只看该作者
>>所以vfork必须和exec搭配使用才能体现出来优点。
嗯.是的.
>>不知道system用的是哪个?按理说应该用vfork才对
我觉得应该根据你实际的任务需要来进行选择,vfork也不是完全不能用.反正我的看法就是根据你的需要来定.

论坛徽章:
0
9 [报告]
发表于 2007-11-22 14:09 |只看该作者
发现这个问题是因为在用java做的程序调用一段c代码,而里面又含有system()的时候,经常莫名其妙失败。而那个java程序通常占用1G左右内存。
结论是系统的那个system()函数不好用,当进程不占多少内存的时候可以用。否则就应该用 vfork写一个自己的system()函数。

论坛徽章:
0
10 [报告]
发表于 2007-11-22 15:18 |只看该作者
再多讨论讨论关于进程方面的知识。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP