码迷,mamicode.com
首页 > 其他好文 > 详细

fork与 execve的区别

时间:2018-01-18 13:29:12      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:name   html   pos   cpp   函数   文件路径   执行   调用   区别   

在父进程中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的区别

标签:name   html   pos   cpp   函数   文件路径   执行   调用   区别   

原文地址:https://www.cnblogs.com/yorkyang/p/8309382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!