标签:
三: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; }
标签:
原文地址:http://www.cnblogs.com/zhanggaofeng/p/5814347.html