推荐答案
测试一下
题目
2exec函数 ................................ ................................ ................................ ............…
参考答案与知识点
参考答案
exec函数族用于在进程中执行新程序,它会用新程序的代码段、数据段、堆和栈完全替换当前进程的映像,但进程ID、父进程ID等进程控制块(PCB)中的大部分信息保持不变。常见的成员包括:execl(列表参数)、execv(数组参数)、execlp(带PATH搜索路径)、execvp、execle(可指定环境变量)、execve(系统调用底层接口)。它们的主要区别在于参数传递方式(列表 vs 数组)、是否搜索PATH环境变量、是否支持自定义环境变量。
在典型使用场景中,exec通常与fork配合:父进程调用fork创建子进程,子进程调用exec加载新程序,父进程则继续执行原代码或通过wait等待子进程结束。这样可以实现多任务并发(如shell执行外部命令)。exec本身不创建新进程,只是替换当前进程的代码;但如果exec执行失败,原进程继续运行,通常需要检查返回值并处理错误(如perror)。
考点:1)exec与fork的区别:fork复制进程,exec替换进程;2)exec函数族的返回值:成功不返回,失败返回-1并设置errno;3)参数列表中最后一个参数必须是NULL指针(对于列表形式)或NULL元素(对于数组形式);4)exec后进程的文件描述符(除非设置了FD_CLOEXEC)、信号处理函数(如有SIG_IGN或默认处理)、环境变量等行为受系统规范影响。易错点:忘记检查exec返回值;混用execl/execv时未正确终止参数列表;误以为exec能返回成功状态。
涉及知识点
- exec函数族替换进程映像
- fork+exec协作模型
- exec返回值:成功不返回
- 参数列表必须以NULL结尾
- exec后PCB属性变化