linux exec函数怎么使用?linux进程中exec函数族的使用

时间:2024-02-25 00:21:26/人气:412 ℃

广东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优就业

推荐

  • 1如何用腹式呼吸法消除声音发抖的技巧440
  • 2真情在身边高二抒情作文750字313
  • 3自我介绍一百字作文范文五篇208
  • 4国内突发性公共卫生事件应急处理困境与建议论文414
  • 5简单水果生日蛋糕图片238
  • 6真实的我270
  • 72010年9月大学生入党思想汇报:提高自己的思想层次490
  • 8男性适宜练习什么瑜伽的动作374
  • 97-10岁儿童画100幅冬天简单又好看:儿童画教程,趣味四格画红墙白雪493
  • 10手机hicar功能,你甚至可以在平板上使用HiCar450
  • 首页/电脑版/地图
    © 2024 OONiu.Com All Rights Reserved.