这篇文章主要介绍C中fork()和exec()之间的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
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()之间的区别有哪些的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。