执行进程
在系统调用 fork() 之后,有个进程使用系统调用 exec(),以用新程序来取代进程的内存空间。系统调用 exec() 加载二进制文件到内存中(破坏了包含系统调用 exec() 的原来程序的内存内容),并开始执行。采用这种方式,这两个进程能相互通信,并能按各自方法运行。父进程能够创建更多子进程,或者如果在子进程运行时没有什么可做,那么它采用系统调用 wait() 把自己移出就绪队列,直到子进程终止。因为调用 exec() 用新程序覆盖了进程的地址空间,所以调用 exec() 除非出现错误,不会返回控制
exec函数族
表中前四个函数以完整的文件路径进行文件查找,后两个以p结尾的函数,可以直接给出文件名,由系统从$PATH中指定的路径进行查找。这里不同的函数后缀,代表着的含义是:
值得注意的是:这六个函数中真正的系统调用只有execve(),其他的都是库函数,它们最终都会调用到execve();exec函数常常会因为找不到文件,或者没有对应文件的运行权限等原因而执行失败,所以,在使用是最好加上错误判断语句。
[exec函数后缀]
- 不