news 2026/4/24 8:42:08

Linux -- exec 进程替换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux -- exec 进程替换

exec 进程替换

核心概念:exec 进程替换

  1. 本质:用新程序把当前进程的代码段、数据段、堆栈完全替换掉,执行新逻辑。

  2. 关键特性

    • 进程号 PID 不变

    • 父子关系不变

    • 替换后原进程代码不再执行(exec 之后的代码不会运行)

  3. 作用:让子进程执行完全不同的程序,是实现shell 命令执行的底层机制。

exec 函数族(6 个)

统一头文件:#include <unistd.h>

函数名特点说明
execl路径 + 列表需写完整路径,参数列表结尾必须(char*)NULL
execlp文件名 + 列表自动搜索 PATH,最常用
execle路径 + 列表 + 环境变量自定义环境变量
execv路径 + 数组参数用数组传递
execvp文件名 + 数组自动搜 PATH,参数用数组
execvpe文件名 + 数组 + 环境变量带自定义环境变量

记忆规则:

  • l:list 参数以列表形式给出

  • v:vector 参数以数组形式给出

  • p:path 自动按系统 PATH 查找程序

  • e:env 自定义环境变量

典型示例

  1. execlp(最常用)

// 执行 ps -f -e printf("pid=%d\n", getpid()); execlp("ps", "ps", "-f", "-e", (char*)NULL); // 下面这行永远不会执行 printf("aaa\n");
  1. execv(数组传参)

char *arg[] = {"ps", "-f", "-e", NULL}; execv("/usr/bin/ps", arg);

经典用法:fork + exec + wait

  1. 父进程(模拟 bash)循环等待输入

  2. 输入命令后fork 创建子进程

  3. 子进程用exec 替换执行命令

  4. 父进程wait 等待子进程结束,再继续循环

流程:

父进程循环 → 输入命令 → fork → 子进程exec → 父进程wait → 回到循环

配套常用函数

  1. fflush(stdout)

    立即刷新输出缓冲区,确保内容先打印到屏幕。

  2. strtok

    字符串分割,用于拆分命令与参数。

  3. wait(NULL)

    父进程阻塞,等待子进程退出,避免僵尸进程。

核心要点

  1. exec 只替换进程内容,不创建新进程。

  2. exec 成功后,原进程代码不再执行

  3. 命令行终端的所有命令,底层都是fork + exec + wait

Mybash 实现(exec 综合应用)

核心思路

父进程不退出,循环接收命令 →fork()创建子进程 → 子进程exec替换执行命令 → 父进程wait()等待子进程退出。

常用系统函数

  • getpwuid():通过 UID 获取用户信息结构体

    • pw_name:用户名

    • pw_uid:用户 ID

    • pw_dir:家目录

  • getcwd(buf, size)获取当前工作目录

  • gethostname(name, size):获取主机名

  • chdir(路径):切换目录

  • fflush(stdout):强制刷新输出缓冲区

  • strtok():字符串分割(拆分命令与参数)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 8:38:19

Cortex模型架构深度解析:MoE模块设计与0.2B激活参数优化

Cortex模型架构深度解析&#xff1a;MoE模块设计与0.2B激活参数优化 【免费下载链接】Cortex 从零构建大模型&#xff1a;从预训练到RLHF的完整实践 项目地址: https://gitcode.com/gh_mirrors/cortex27/Cortex Cortex是一个从零构建大模型的完整实践项目&#xff0c;涵…

作者头像 李华
网站建设 2026/4/24 8:38:18

jQuery Deferred对象:异步编程的终极解决方案指南

jQuery Deferred对象&#xff1a;异步编程的终极解决方案指南 【免费下载链接】jquery jQuery JavaScript Library 项目地址: https://gitcode.com/gh_mirrors/jq/jquery jQuery Deferred对象是jQuery JavaScript Library提供的强大异步编程工具&#xff0c;它能够优雅地…

作者头像 李华
网站建设 2026/4/24 8:32:39

嵌入式设备中的高效枚举映射

在嵌入式系统开发中,性能优化是一个持续的话题。对于那些需要高效访问特定数据的场景,使用传统的std::map或std::unordered_map可能不是最佳选择,因为它们在性能受限的环境中可能会引入不必要的开销。本文将介绍如何利用C++的std::array和枚举类型创建一个高效的静态映射,并…

作者头像 李华
网站建设 2026/4/24 8:32:04

无需代码!7 个实用爬虫软件,三分钟高效搞定数据采集

学会这7个爬虫软件&#xff0c;三分钟搞定数据采集 爬虫技术是数据采集的核心手段&#xff0c;涉及到http请求、html解析、正则处理等技术&#xff0c;算是比较复杂的编程开发&#xff0c;对于很多人来说是不低的门槛。 我最常用Python来实现爬虫&#xff0c;因为有很多的库可…

作者头像 李华
网站建设 2026/4/24 8:31:28

Qwen3-VL-4B Pro实战:用日常照片测试,AI如何帮你理解图片内容

Qwen3-VL-4B Pro实战&#xff1a;用日常照片测试&#xff0c;AI如何帮你理解图片内容 1. 当AI真正"看懂"你的照片时会发生什么 想象一下这样的场景&#xff1a;你手机相册里存着上百张随手拍的照片——工作会议的白板笔记、旅行时偶遇的有趣招牌、网购商品的实物拍…

作者头像 李华