fork与 execve的区别

Posted yorkyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fork与 execve的区别相关的知识,希望对你有一定的参考价值。

在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。

#include<unistd.h>

函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);

返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

int main()
{
    /* 没有参数 */
        char *argv[]={"pwd",NULL};
        char *envp[]={"PATH=/bin", NULL};
        execve("/bin/pwd", argv, envp);
}

int main()   
{
    /* 有参数 */
char *argv[]={"ls", "-al", "/etc/passwd", NULL};   
char *envp[]={"PATH=/bin", NULL};
execve("/bin/ls", argv, envp);   
}

  

linux fork()和execve()的区别

fork是分身,execve是变身。

 exec系列的系统调用是把当前程序替换成要执行的程序,而fork用来产生一个和当前进程一样的进程(虽然通常执行不同的代码流)。通常运行另一个程序,而同时保留原程序运行的方法是,fork+exec

exec系列的系统调用已经是变成别的程序了,已经和本程序无关了

以上是关于fork与 execve的区别的主要内容,如果未能解决你的问题,请参考以下文章

linux中fork,source和exec的区别

linux中fork,source和exec的区别

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

如何在不更改标准输入缓冲的情况下 fork-then-execve?

计算机系统篇之异常控制流:利用 fork 和 execve 实现一个简易的 shell 程序

计算机系统篇之异常控制流:利用 fork 和 execve 实现一个简易的 shell 程序