Linux 进程创建二(execve)

Posted 庖丁解牛

tags:

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

三:execve系统调用
int execve(const char *filename, char *const argv[],char *const envp[]);
fork创建了一个新的进程,产生一个新的PID
execve用被执行的程序完全替换了调用进程的映像。
execve启动一个新程序,替换原有进程,所以被执行进程的PID不会改变。
execve函数接受三个参数
--path    要执行的文件完整路径
--argv    传递给程序完成参数列表,包括argv[0],它一般是执行程序的名字,最后一个参数一般是NULL
--envp    是指向执行execed程序的环境指针,一般设为NULL

 

//execve函数的定义
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(int arg, char * args[])
{
    /*
      第一个参数是程序的名字,第二个参数是被调用程序的参数,最后一个参数必须是NULL
      这个跟main函数的参数args数组很相似
     */
    char * argv[]={"/bin/ls","-l",NULL};
    execve("/bin/ls",argv,NULL);
    /*
     execve函数是替换原来的程序代码,但是进程PID不会变,文件描述符不会变,只是程序代码被替换了
     所以execve函数后面的语句都不会被执行
     */
    printf("program is end!\n");
    return 0;
}

 

以上是关于Linux 进程创建二(execve)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 0.11-execve函数-35

Linux 0.11-execve函数-35

linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

进程装载过程分析(execve系统调用分析)

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

Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度