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进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)