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言语教程》
以上就是本篇文章的全部内容,愿望能对人人的进修有所协助。更多精彩内容人人能够关注ki4网相干教程栏目!!!
以上就是C中fork()和exec()之间的区分是什么?fork()和exec()的简朴比较的细致内容,更多请关注ki4网别的相干文章!