内核篇第二讲:Linux exec 函数族详解

大家好,接下来的一段时间我将开始学习野火的Linux 系统课程并将学习到的干货逐步更新到我的CSDN博客中。没时间刷课的同学可以把我的博客喂给AI 突击一下。

目录

[1、什么是 exec 函数族](#1、什么是 exec 函数族)

2、后缀含义

3、头文件

4、函数原型拆解

5、返回值

6、核心原理

快速记忆口诀

1、什么是 exec 函数族

exec 用来替换当前进程的程序,不会新建进程。调用后,当前进程的代码、数据直接被新可执行文件替换,进程 ID 不变;成功后原程序不再继续执行。

搭配:一般先用 fork() 创建子进程,再在子进程调用 exec,让子进程跑别的程序。

2、后缀含义

后缀 含义
l list,可变参数列表 传参,参数逐个写,最后以NULL结尾
v vector,字符串数组 传参,把所有参数放进char* argv[]数组
p path,自动从PATH环境变量搜索可执行文件,不用写完整路径
e environment,自定义环境变量 ,传入envp[]数组替换默认环境

组合例子:execlp = l + p;execve = v + e(execve 是 Linux 系统调用,其余都是库函数封装)

3、头文件

复制代码
#include <unistd.h>

4、函数原型拆解

  • execl:l 后缀,参数列表,必须指定可执行文件完整路径

    int execl(const char *path, const char *arg, ...);
    // 示例:execl("/bin/ls", "ls", "-l", NULL);

  • execlp:l+p,参数列表 + 自动搜 PATH,可只写文件名不用全路径

    int execlp(const char *file, const char *arg, ...);
    // 示例:execlp("ls", "ls", "-l", NULL);

  • execv:v 后缀,参数数组,指定完整路径

    int execv(const char *path, char const argv[]);
    // char
    argv[] = {"ls", "-l", NULL}; execv("/bin/ls", argv);

  • execve :v+e,参数数组 + 自定义环境变量,真正的系统调用

    int execve(const char *path, char *const argv[], char *const envp[]);

5、返回值

  • 成功:函数不返回 。exec 会直接替换当前进程的代码段、数据段,原来的程序代码直接消失,去运行新程序,后面代码不会执行。
  • 失败:返回 -1,保留原进程上下文,可以继续往下执行,一般用 perror 查看错误。

6、核心原理

exec 系列函数不会创建新进程fork()创建新进程(复制一份进程),然后在子进程里调用exec,把子进程替换成目标程序。

总结:

  • l 列表,v 数组;p 找 PATH,e 换环境
  • L 后缀和 V 后缀必须两者选其一来使用
  • p 后缀和 e 后缀是可选的,可用可不用
  • 组合后缀的相关函数还有很多,可自己进一步了解
  • exce函数有可能执行失败,原因可能有以下几点:
    • 新程序的文件路径出错
    • 传参或者是自定义环境变量时,没有加NULL
    • 新程序没有执行权限
相关推荐
做运维的阿瑞28 分钟前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲1 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz1 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
susplus2 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)2 小时前
Linux进阶知识1.0
linux·运维·服务器
>Andre<2 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
用户0510122572963 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地3 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.3 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
GeW3 小时前
工作忙.基础弱,也能快速拿RHCE?这套方法亲测有效
linux