免费注册 查看新帖 |

Chinaunix

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

[函数] fork 出子进程后,用 exec函数 和 直接执行一个 C 语言函数有什么区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-02 08:50 |只看该作者 |倒序浏览
fork 出子进程后,用 exec函数 和 直接执行一个  C 语言函数有什么区别

比如 : execl("/bin/ls","ls","-l",NULL)
不是也可以 直接这样吗:  system("ls -l")

这两种方式有什么区别呢

论坛徽章:
0
2 [报告]
发表于 2006-08-02 09:22 |只看该作者
使用C函数,那只是调用而已,仍然只有一个进程.但如果是exec函数,就会产生另一个进程,这时是两个进程同时运行.

论坛徽章:
0
3 [报告]
发表于 2006-08-02 09:24 |只看该作者
楼上的理解错 了我的意思
我的意思是这样的

pid_t childpid = fork()

if (childpid==0)
{
在这里 执行: execl("/bin/ls","ls","-l",NULL)
或者执行:  system("ls -l")
}
else
{
}

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
4 [报告]
发表于 2006-08-02 09:27 |只看该作者
我觉得效率不同吧!

论坛徽章:
0
5 [报告]
发表于 2006-08-02 09:50 |只看该作者
原帖由 yeajchao 于 2006-8-2 09:24 发表
楼上的理解错 了我的意思
我的意思是这样的

pid_t childpid = fork()

if (childpid==0)
{
在这里 执行: execl("/bin/ls","ls","-l",NULL)
或者执行:  system(" ...

execl:进程进入了shell环境执行 执行完进程结束
system=fork+exec+waitpid:执行完进程仍然存在,只是用它的子进程执行了操作

论坛徽章:
0
6 [报告]
发表于 2006-08-02 10:02 |只看该作者
system=fork+exec+waitpid

创建一个子进程,子进程替换为/bin/ls运行, 子进程结束,父进程继续

有这个函数,就省得你操作了

论坛徽章:
0
7 [报告]
发表于 2006-08-02 10:15 |只看该作者
我只是拿这个举个例子

我可以在调用 system函数的地方调用我自己写的函数阿
在这个函数里,做子进程应该作的事情
当然,也可应用 用 exec 系列函数来调用我写好的其他的函数
问题是,这两种操作模式有什么不同呢 ?

顺便问一个弱弱的问题
假如有程序段
system ("ls -l |grep ^d")
printf("I am following the [system] funciton \m");

那么,在system函数 fork出的子进程返回前,下面的printrf 语句会执行吗 ?
应该不会吧

论坛徽章:
0
8 [报告]
发表于 2006-08-02 10:18 |只看该作者
原帖由 yeajchao 于 2006-8-2 10:15 发表
我只是拿这个举个例子

我可以在调用 system函数的地方调用我自己写的函数阿
在这个函数里,做子进程应该作的事情
当然,也可应用 用 exec 系列函数来调用我写好的其他的函数
问题是,这两种操作模式有什 ...

system=fork+exec+waitpid

论坛徽章:
0
9 [报告]
发表于 2006-08-02 10:57 |只看该作者
原帖由 yeajchao 于 2006-8-2 10:15 发表

在system函数 fork出的子进程返回前,下面的printrf 语句会执行吗 ?
应该不会吧

有人给你解释过system=fork+exec+waitpid

仔细想一下waitpid 是干什么吃的???

论坛徽章:
0
10 [报告]
发表于 2006-08-02 13:52 |只看该作者

回复 7楼 yeajchao 的帖子

printf会在后面执行,不可能在其前面的。因为system里面还有一个wait的步骤。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP