linux exec函数怎么使用?linux进程中exec函数族的使用
广东IT优就业
在linux进程中通常使用fork函数来创建父子进程,虽然fork函数采用的是写实拷贝技术,但是当创建的子进程并不想继续与父进程相关的操作时那些拷贝的内容就纯粹属于浪费,那么一个子进程怎样变成一个全新的进程,此时exec函数族的函数就派上用场了。
exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。
exec函数族的函数原型如下:
int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
exec函数族共有6个函数,其中的5个是库函数,只有execve是系统调用。下边来介绍函数名字中的’l’, ‘p’, ‘e’, ‘v’的含义。
广东IT优就业
‘l’表示传递的参数是以列表形式出现即分开的,需要一个一个的传递,比如:execl(“/bin/ps”, “ps”, “ajx”, NULL), 其中第一个参数代表传递的一个要执行的程序的路径,第二个参数必须和第一个参数的文件保持一致,后边的 ajx,NULL都是参数,而且最后一个参数必须是NULL。
‘v’参数表示函数传递的参数是以组合形式的传递而不用一个一个的传递比如:char *buf[] = {“ps”, “ajx”, NULL}; execv(“/bin/ps”, buf),其中buf这个指针数组包含了需要传递参数并且最有一个参数是NULL。
‘p’参数表示exec函数要传递可执行文件的名字,不需要传递文件路径,在执行时会从环境变量中来搜索执行,比如:
execp(“ps”, “ps”, “ajx”, NULL);
‘e’参数表示传递给新进程的环境变量,比如:
char *buf[] = {“PATH=/usr/bin”, NULL};
execle(“./test”, NULL, buf);那么在新的进程中环境变量PATH就变成/usr/bin下的内容了。
exec函数族可以通过不同的参数组合来运行一个新进程,只不过不同组合传递参数的方法和意义不同而已,只要掌握明白l, p, v, e的意义就可以搞定了。
精彩IT内容推荐:
带你打开世界第一编程语言的大门:http://www.ujiuye.com/zt/java/?wt.mc_id=17009338
广东IT优就业
- 04-10燕山大学毕业证明书线上办理指南,燕山大学毕业证明书线上办理指南
- 05-04指甲缝里扎了一根刺有生命危险吗?指甲里像是扎了一根刺
- 12-31自制动物英文卡片:自制英文学习卡片分享
- 03-26我知道我爱你请我吃饭 我爱你,我想请你吃饭
- 04-11哪个网约车平台新司机能免佣?网约车平台妥妥E行开启
- 05-05祛痘淡印什么产品好?祛痘淡印好物段位大测评
- 01-05思维题填相同的数:思考题,在
- 04-14寿命最长久的狗是哪种?寿命最短,的几种狗一旦养了
- 12-20坐月子有哪些不能碰不能吃的?坐月子不想留病根最好别碰这4种食物
- 04-02大型注塑机水平调节最佳方法:如何对注塑机的整机性能进行调试
- 12-07秋分是不是丰收节,今年的秋分在9月23日农历的八月
- 03-07与项羽有关的成语典故背水一战,国学成语番外篇,45向雄和刘淮
- 03-17帮助老人学习使用智能手机:老年人学习使用智能手机
- 02-2540万左右林肯航海家 林肯航海家,322马力500N
- 04-27农村最经典5款二层别墅,5款二层带超大露台农村别墅
- 04-10金毛到底有多暖男 别用暖男来形容金毛看完这篇文章
热门
推荐
- 1梦见吃肉丸子是什么意思170
- 2摘抄《三国演义》好词好句294
- 3办公室勃然大怒四大守则434
- 4四年级学生表现评语277
- 5笔记本鼠标键盘间歇性失灵322
- 6关于我的大学我做主励志演讲稿199
- 7街头象棋残局太白醉捞水中月366
- 8机关作风整顿学习心得231