Linux 之exec系列函数

在这里插入图片描述

当进程调用exec系列函数中的任一个时,该进程用户空间资源(正文、数据、堆、栈)完全由新程序替代。因为调用exec并不创建新程序,如果无特殊指示代码,进程内核信息基本不用修改

(1)execl函数声明如下:

// from /usr/include/unistd.h
int execl(const char* path,const char* arg,...); 
例子 : execl("/bin/ls","ls","-l","/home",(char*)0);

第一个参数表示execl要执行的程序,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。

(2)execle函数声明如下:

// from /usr/include/unistd.h
int execle(const char* path,const char* arg,...); 
例子:execle("/bin/ls","ls","-l","/home",(char*)0,env);

execle用来执行参数path代表的程序,第二个及以后的参数代表执行文件时传入参数列表,最后一个参数必须指向一个新的环境变量数组,即新执行程序的环境变量。

(3)execlp函数声明如下:

// from /usr/include/unistd.h
int execlp(const char* file,const char* arg,...); 
例子:execlp("ls","ls","-l","/home",(char*)0);

execlp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。

(4)execv函数声明如下:

// from /usr/include/unistd.h
int execv(const char* path,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
	 execv("/bin/ls",argv); 

execv函数执行path路径下的程序,第二个参数为数组指针维护的程序参数列表,该数组的最后一个成员必须为NULL.

(5)execvp函数声明如下:

// from /usr/include/unistd.h
int execvp(const char* file,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
	 execv("ls",argv); 

execvp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。

(6)system函数声明如下:

//from /usr/include/stdlib.h
int system(const char* command);

system函数用来创建新进程,直到程序结束后才继续运行父进程。一般运行脚本文件
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值