← eetop.cn_Perl语言入门(第四版小骆驼书)

推荐答案 测试一下

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属性变化
← 上一题
登录后反馈错题
下一题 →