注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

读程序,学习Linux编程(三十六)  

2010-09-02 21:19:38|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

4.4. exec函数

Linux提供了6个函数启动一个新程序。

上面这句话有两个意思,一是提供了6个函数。其实只是参数不同,他们最后都是调用了execle这个函数。具体的参数看man去吧。

#include

extern char **environ;

int execl(const char *path, const char *arg, ...);

int execlp(const char *file, const char *arg, ...);

int execle(const char *path, const char *arg, ..., char * const envp[]);

int execv(const char *path, char *const argv[]);

int execvp(const char *file, char *const argv[]);

另一个意思是启动了一个新程序。这里没有说是新进程,是因此没有产生新的进程。当前进程被新的程序所代替,进程id,用户id等等,都没有变,只是进程从此刻开始进入到新进程的main函数了。很奇怪吧,这就是Linux的逻辑。

结合在3.11一节的内容,在Linux里启动一个新程序的方法是:

1. fork自己

2. 子进程execle新程序

在1和2之间,可以插进来做一些手脚,正如我们在3.12节里提到过的。

3.11节提到过Copy-On-Write技术,如果感兴趣,可以参考我写的一篇分析Cstring源代码的文章。

fork之所以用COW技术,除了速度快,另一个就是因为大多数时候fork仅仅为了exec一个新程序,以前进程的数据可能都没有用到。

书上或者某些技术文章会讲到vfork,记住跳过不看,浪费时间。

  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017