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

【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.xdnf.cn/news/18956.html

相关文章:

  • RAG中使用到的相关函数注释——LangChain核心函数
  • AI出题人给出的Java后端面经(二十仨)(不定更)
  • 【AI论文】FutureX:面向未来预测任务中大语言模型智能体的前沿动态基准测试
  • 【科研绘图系列】R语言在海洋生态学中的应用:浮游植物糖类组成与溶解性有机碳的关系
  • 永磁同步电机无速度算法--传统脉振方波注入法(1)
  • LangGraph
  • 【更新至2024年】2000-2024年各地级市绿色专利数据
  • 【lucene】spancontainingquery
  • 主流的 AI Agent 开发框架
  • 矩阵的秩几何含义
  • WPS 智能文档,5分钟上手!
  • 云蝠智能 Voice Agent:多语言交互时代的AI智能语音呼叫
  • 支持向量机(第二十九节课内容总结)
  • JMM 浅析
  • StandardScaler()进行0,1标准化时fit_transform与transform的区别
  • HTML的form表单
  • 子串:和为K的子数组
  • 记一个Mudbus TCP 帮助类
  • from中烟科技翼支付 面试题1
  • 财报出炉,李宁也被“靠边站”了
  • 摄像头模块的技术原理
  • WeakAuras Lua Script (My Version)
  • 【Lua】题目小练11
  • 红黑树下探玄机:C++ setmultiset 的幕后之旅
  • 无线网络中的Duration字段计算:原理、机制与实现
  • 深入了解linux系统—— 线程封装
  • 【prism】Prism 弹窗在 ViewModel 中控制大小的实践总结
  • 视觉工具:文字显示、图像标注与多模板匹配
  • 「大模型学习」(15)Prompt Tuning → P-Tuning v1 → P-Tuning v2
  • STM32G4 SVPWM VF开环强拖电机