6个exec只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。
exec函数族的作用是根据指定的文件名找到可执行文件,并用他来取代系统调用的内容,也就是说在调用进程内部执行一个可执行文件(2进制或脚本)。


exec函数执行成功后不返回,因为调用进程的实体,包括代码段、数据段、栈堆等都被替换,只保留进程ID等表面信息为变。只有调用失败才会返回-1,从原程序的调用点接着往下走。(exec相对于其他系统调用来说易受伤,要加判断,如errno置为ENOENT表示找不到文件或路径)

linux系统调用 exec函数族简介



linux执行新程序:
1、某进程认为自己无用了,还可以发挥一点余热,调用一个exec让自己换个灵魂重生。
2、某个进程想执行另外的程序,可以fork(vfork)出一个新进程,然后调用exec。(普遍)


fork和Vfork的区别:
fork会将调用进程的所有内容原封不动的拷贝到子进程,拷贝耗时较多。
vfork后不会立即拷贝,而是到真正用时才拷贝(称之为写时拷贝),保证子进程先运行,exec或exit前在父进程地址空间运行,exec后才会有自己的进程空间。
对于exec来说,fork后拷贝的父进程内容会被马上替换,造成浪费。而如果vfork后马上exec就不会出现这种情况。

相关文章:

  • 2022-03-06
  • 2021-09-28
  • 2021-10-06
  • 2022-01-05
  • 2021-10-15
  • 2022-12-23
猜你喜欢
  • 2021-08-16
  • 2022-12-23
  • 2022-01-05
  • 2021-05-29
相关资源
相似解决方案