在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。

#include<unistd.h>

函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);

返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.

函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

  1. #include<unistd.h>
  2. main()
  3. {
  4.   char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};
  5.   char *envp[ ]={"PATH=/bin", NULL}
  6.   execve("/bin/ls", argv, envp);
  7. }

运行结果为:-rw-r--r-- 1 root root 1659 Feb 27 20:13 /etc/passwd

这与在bin目录下执行 ls -al /etc/passwd 所得到的结果是一样的。

linux fork()和execve()的区别

fork是分身,execve是变身。

exec系列的系统调用是把当前程序替换成要执行的程序,而fork用来产生一个和当前进程一样的进程(虽然通常执行不同的代码流)。通常运行另一个程序,而同时保留原程序运行的方法是,fork+exec。

看看手册里面的例子就知道怎么用了。

exec系列的系统调用已经是变成别的程序了,已经和本程序无关了

最新文章

  1. call
  2. 单源最短路径算法——Dijkstra算法
  3. php生成静态文件
  4. poj2763 树链剖分(线段树)
  5. Tomcat 部署:工程下 META-INF 目录下的 Context.xml
  6. 简单模拟Spring管理Bean对象
  7. tyvj 1056 能量项链 区间dp (很神)
  8. linux_软件安装策略和升级策略
  9. monkey日志分析
  10. 利用websocket实现微信二维码码扫码支付
  11. 【CF280D】 k-Maximum Subsequence Sum ,线段树模拟费用流
  12. 学习Spring Boot:(一)入门
  13. 自定义simple_tag和filter在html中渲染出来的联系和区别
  14. RuntimeException: Type &quot;nmethodBucket*&quot;, referenced in VMStructs::localHotSpotVMStructs in the remot
  15. CSS 表格实例
  16. 【LG1368】工艺
  17. OneZero第四周第五次站立会议(2016.4.15)
  18. java从文件中读取数据然后插入到数据库表中
  19. 准确率,召回率,F值,机器学习分类问题的评价指标
  20. 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)

热门文章

  1. Educational Codeforces Round 16 E. Generate a String dp
  2. 未能加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或它的某一个依赖项。系统找不到指定的文件。
  3. C#高级编程 (第六版) 学习 第一章:.Net体系结构
  4. C++ Primer Plus学习:第八章
  5. java程序连接MySQL数据库
  6. Microsoft Orleans 之简介
  7. 操作系统cmd
  8. web_config配置
  9. phpisset()和empty()函数区别
  10. 第162天:canvas中Konva库的使用方法