当前位置: 首页 > news >正文

【Linux 进程】进程程序替换

文章目录

      • 1.进程替换的六个库函数
      • 2.execl

1.进程替换的六个库函数

  • 使用 man 3 execl 进行查询,3表示 Linux 中的3号手册,即为库函数(例如C标准库中的库函数,printfmalloc

  • man 1: 用户命令(在shell中可以执行的命令,如 ls, cp

  • man 2: 系统调用(由内核提供的接口,如 open, read, fork

在这里插入图片描述

2.execl

🍎参数介绍
pathname:表示要替换程序的路径(绝对路径或者相对路径都可);
arg:命令行参数的第一个参数,一般是程序名本身;
...:表示可变参数,按照要求填写命令行参数即可
注意:结尾一定要以 NULL,表示结束标志;

execl的返回值我们不用关心,因为只要程序替换成功,旧的代码将不再执行,如果后续的代码执行了,说明替换失败。

int execl(const char *pathname, const char *arg, .../* (char  *) NULL */);

在这里插入图片描述

  • 小案例:使用 ls -a -l来替换程序代码
#include <stdio.h>
#include <unistd.h>int main()
{printf("the program begin\n");execl("/usr/bin/ls", "ls", "-a","-l", NULL);printf("the program end\n");return 0;
}

》运行结果如下:
程序替换成功,原来的程序代码 the program end 已经被替换成为 ls -a -l
在这里插入图片描述


  • 多进程版本:子进程中进行程序替换,父进程正常执行
    下面这个代码案例说明,虽然刚开始父子进程是共享同一块代码的内存区域的,但是当子进程发生程序替换要对代码进行修改时,此时OS会发生写时拷贝,在物理内存上新建一块内存区域,首先把父进程的代码进行复制,然后再把子进程要替换的代码加载进来。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>int main()
{printf("the program ...  begin\n");pid_t id =fork();// child processif (id == 0){sleep(2);execl("/usr/bin/ls", "ls", "-l", "-a", NULL);exit(123);}// father processint status = 0;pid_t wid = waitpid(id, &status, 0);if (wid > 0){printf("the father wait child  success, the child exitcode:%d\n", WEXITSTATUS(status));}printf("the program ...  end\n");return 0;
}

》运行结果如下:
在这里插入图片描述

http://www.dtcms.com/a/351794.html

相关文章:

  • 【GitHub】使用SSH与GitHub交互
  • 工业大模型五层架构全景解析:从算力底座到场景落地的完整链路
  • PyCharm注释详解:TODO、文档注释、注释
  • MySQL 索引:结构、对比与操作实践指南
  • 【合适新人】预测图片教程——如何随机抽取验证集图片进行可视化推理!(附完整代码)
  • DigitalOcean GPU 选型指南(三):中端AI GPU性价比之王 RTX 4000 Ada、A4000、A5000
  • 无人机航拍数据集|第33期 无人机树冠目标检测YOLO数据集5842张yolov11/yolov8/yolov5可训练
  • 【HZ-T536开发板免费体验】无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板
  • Java大厂面试全真模拟:从Spring Boot到微服务架构实战
  • 文本转语音TTS工具合集(下)
  • 【强化学习】区分理解: 时序差分(TD)、蒙特卡洛(MC)、动态规划(DP)
  • 计算机底层硬件实现及运行原理通俗书籍推荐
  • 记一次MySQL数据库的操作练习
  • 把 AI 塞进「空调遥控器」——基于 MEMS 温湿阵列的 1 分钟极速房间热场扫描
  • 如何获取当前页面html元素的外层容器元素
  • vscode或者cursor配置使用Prettier - Code formatter来格式化微信小程序wxss/wxs/wxml文件
  • Vue Flow 设计大模型工作流 - 自定义大模型节点
  • 基于XiaothinkT6语言模型的文本相似度计算:轻量方案实现文本匹配与去重
  • 乳腺癌数据集支持向量机实践学习总结
  • 2025最新的软件测试热点面试题(答案+解析)
  • OnlyOffice 渲染时间获取指南
  • from中烟科技翼支付 面试题2
  • 项目集升级:顶部导览优化、字段自定义、路线图双模式、阶段图掌控、甘特图升级、工作量优化、仪表盘权限清晰
  • 用大语言模型提升语音翻译:一种全新的端到端方法
  • vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示2
  • 「大模型学习」(15)Prompt Tuning → P-Tuning v1 → P-Tuning v2
  • (论文速读)Prompt Depth Anything:让深度估计进入“提示时代“
  • 6.5 el-tree 组件
  • 用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training
  • Research相关的面试(个人)