免费注册 查看新帖 |

Chinaunix

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

fork、exec系列与system、popen区别 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-06-26 14:03 |只看该作者

fork、exec系列与system、popen区别

补充下popen,很长时间没接触这东西,我只能凭着印象说:
popen(char *command,char *type);它创建一个管道,创建一个子进程用SHELL来执行command,按照type指定管道流的方向,比如读或写,这其实等同于用pipe创建管道实现父进程与子进程之间通信。

论坛徽章:
0
12 [报告]
发表于 2003-06-26 14:13 |只看该作者

fork、exec系列与system、popen区别

原帖由 "无双" 发表:
使用system不是很安全,并且需要起一个shell
增加系统开锁

system()需要调shell吗?我认为是fork后直接exec。

论坛徽章:
0
13 [报告]
发表于 2003-06-26 16:09 |只看该作者

fork、exec系列与system、popen区别

system是由shell实现的。并不是ansi标准函数。所以需要调shell来实现。应该是这样吧
所以不同系统应该不一样呀,如果提供了专门的C函数接口,应该是fork 后exec。

不知道这样说对不对呀

论坛徽章:
0
14 [报告]
发表于 2003-06-26 18:46 |只看该作者

fork、exec系列与system、popen区别

看看它的man
是启动一个shell

论坛徽章:
0
15 [报告]
发表于 2003-06-27 09:03 |只看该作者

fork、exec系列与system、popen区别

原帖由 "无双" 发表:
看看它的man
是启动一个shell
   

是呀,man里面说的很清楚。

论坛徽章:
0
16 [报告]
发表于 2003-06-27 09:12 |只看该作者

fork、exec系列与system、popen区别

请问无双版主,我在上面所说的关于fork和exec的区别对吗?主要是入栈出栈那块。

论坛徽章:
0
17 [报告]
发表于 2003-06-27 11:14 |只看该作者

fork、exec系列与system、popen区别

exec的话并不会复制旧进程信息
而是用新进程映象直接替换掉旧进程的地址空间(包括数据与代码段)

但是进程描述表中的文件描述符没有关闭
还有其它旧进程内信息没有关闭(如信号量等 ,这可以看它们的man 里面有说明)

论坛徽章:
0
18 [报告]
发表于 2003-06-27 12:57 |只看该作者

fork、exec系列与system、popen区别

请教无双:

    既然数据段和代码段都被新进程映象直接替换,而且内核或exec都没有复制旧进程信息,那么 exec执行完后,为什么原来的进程还存在,并且可以继续执行代码呢?
    进程描述表中的文件描述符和旧进程内其它信息没有关闭,这句话的意思是不是说,当exec执行完成,内核再从磁盘上载入原来旧进程的信息(数据段和代码段),然后根据原先的信息继续执行代码,是这样吗?

论坛徽章:
0
19 [报告]
发表于 2003-06-27 14:21 |只看该作者

fork、exec系列与system、popen区别

我试试看先

论坛徽章:
0
20 [报告]
发表于 2003-06-27 14:34 |只看该作者

fork、exec系列与system、popen区别

pid=0是子进程
子进程执行完后会退出(因为有exec ,所以只会执行exec部分 不会执行后面的 后面的只是父进程在执行)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP