C中fork()和exec()之间的区别有哪些

这篇文章主要介绍C中fork()和exec()之间的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联主要从事成都网站建设、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务马尾,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

C语言中的fork()

pid_t pid = fork();

fork()通过复制调用进程来创建一个新进程,产生了一个新的PID,新进程(称为子进程)是调用进程(称为父进程)的精确副本。两个进程几乎完全相同,除了以下情况:

1、子进程具有自己的唯一进程ID,并且此PID与任何现有进程组的ID都不匹配。

2、子进程的父进程ID与调用进程的ID相同。

3、子级不继承其父级的内存锁和信号量调整。

4、子级不从其父级继承未完成的异步I/O操作,也不从其父级继承任何异步I/O上下文。

fork()的返回值

fork()不接受任何参数并返回整数值。下面是fork()返回的不同值。

● 负值:创建子进程失败。

● 零:返回到新创建的子进程。

● 正值:返回父母或来电者。该值包含新创建的子进程的进程ID。

说明:一旦成功,子进程的PID将在父进程中返回,而将在子进程中返回0。失败时,在父进程中返回-1,不创建子进程,并适当设置errno。

C语言中的exec()

exec()函数系列将当前进程映像替换为新的进程映像。它将程序加载到当前进程空间,并从入口点运行它。

示例:我们已经在下面的C程序中实现了execv(),exec()系列由以下函数组成,

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[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

fork()和exec()之间的区别

1、fork()创建启动一个新进程,该进程是调用它的进程的副本,两个进程完全相同;而exec()则用另一个(不相同的)进程映像替换当前进程映像,当前进程的“数据段”,“堆栈段”和“代码段”被新程序改写。

2、fork()创建一个新的进程就产生了一个新的PID,因此子进程拥有自己的进程ID。exec启动一个新程序,替换原有的进程,因此新程序会保持调用exec()进程的ID不变,即这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。

3、fork()之前父进程 打开的文件描述符,在子进程中同样打开,并且都指向相同的文件表项。 而,调用exec()之前打开的描述字会继续打开。

以上是C中fork()和exec()之间的区别有哪些的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


文章名称:C中fork()和exec()之间的区别有哪些
文章地址:http://pwwzsj.com/article/gheedh.html