首页后端开发ASP.NETC中fork()和exec()之间的区别是什么?fork()和exec()的简单比较

C中fork()和exec()之间的区别是什么?fork()和exec()的简单比较

时间2024-01-31 04:01:02发布访客分类ASP.NET浏览945
导读:收集整理的这篇文章主要介绍了C中fork( 和exec( 之间的区别是什么?fork( 和exec( 的简单比较,觉得挺不错的,现在分享给大家,也给大家做个参考。每一个应用(程序)都是通过进程的方式来执行的,进程是一个正在运行的程序实例。进...
收集整理的这篇文章主要介绍了C中fork()和exec()之间的区别是什么?fork()和exec()的简单比较,觉得挺不错的,现在分享给大家,也给大家做个参考。每一个应用(程序)都是通过进程的方式来执行的,进程是一个正在运行的程序实例。进程是通过不同的系统调用创建的,最流行的是fork()和exec(),那么它们之间有什么区别?下面本篇文章就来给大家介绍一下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语言教程》

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注相关教程栏目!!!

以上就是C中fork()和exec()之间的区别是什么?fork()和exec()的简单比较的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

fork()

若转载请注明出处: C中fork()和exec()之间的区别是什么?fork()和exec()的简单比较
本文地址: https://pptw.com/jishu/593453.html
一文深入了解 Node 中的事件循环 探索下浏览器和 Node.js 为什么会这样设计 EventLoop!

游客 回复需填写必要信息