Linux -- exec 进程替换

张开发
2026/4/24 8:42:12 15 分钟阅读

分享文章

Linux -- exec 进程替换
exec 进程替换核心概念exec 进程替换本质用新程序把当前进程的代码段、数据段、堆栈完全替换掉执行新逻辑。关键特性进程号 PID 不变父子关系不变替换后原进程代码不再执行exec 之后的代码不会运行作用让子进程执行完全不同的程序是实现shell 命令执行的底层机制。exec 函数族6 个统一头文件#include unistd.h函数名特点说明execl路径 列表需写完整路径参数列表结尾必须(char*)NULLexeclp文件名 列表自动搜索 PATH最常用execle路径 列表 环境变量自定义环境变量execv路径 数组参数用数组传递execvp文件名 数组自动搜 PATH参数用数组execvpe文件名 数组 环境变量带自定义环境变量记忆规则llist 参数以列表形式给出vvector 参数以数组形式给出ppath 自动按系统 PATH 查找程序eenv 自定义环境变量典型示例execlp最常用// 执行 ps -f -e printf(pid%d\n, getpid()); execlp(ps, ps, -f, -e, (char*)NULL); // 下面这行永远不会执行 printf(aaa\n);execv数组传参char *arg[] {ps, -f, -e, NULL}; execv(/usr/bin/ps, arg);经典用法fork exec wait父进程模拟 bash循环等待输入输入命令后fork 创建子进程子进程用exec 替换执行命令父进程wait 等待子进程结束再继续循环流程父进程循环 → 输入命令 → fork → 子进程exec → 父进程wait → 回到循环配套常用函数fflush(stdout)立即刷新输出缓冲区确保内容先打印到屏幕。strtok字符串分割用于拆分命令与参数。wait(NULL)父进程阻塞等待子进程退出避免僵尸进程。核心要点exec 只替换进程内容不创建新进程。exec 成功后原进程代码不再执行。命令行终端的所有命令底层都是fork exec wait。Mybash 实现exec 综合应用核心思路父进程不退出循环接收命令 →fork()创建子进程 → 子进程exec替换执行命令 → 父进程wait()等待子进程退出。常用系统函数getpwuid()通过 UID 获取用户信息结构体pw_name用户名pw_uid用户 IDpw_dir家目录getcwd(buf, size)获取当前工作目录gethostname(name, size)获取主机名chdir(路径)切换目录fflush(stdout)强制刷新输出缓冲区strtok()字符串分割拆分命令与参数

更多文章