linux进程替换(简介)

news2025/1/18 16:45:21

一:什么是进程替换?

定义:

进程替换,是指用一个新进程来替换此时正执行的进程。新进程从头开始执行自己的代码。

例子:

我们有一个父进程A,在父进程A中有一个子进程B

一般来说,子进程是执行父进程的程序代码

但我们这个时候将一个新的程序赋给子进程B,这个时候父进程A和子进程B就相当于两个独立的程序,各自运行了

 简单来说:就是让父进程中的某个子进程独立运行其他程序

二:如何进行进程替换?

我们使用六个进程替换的系统调用,他们分别是

execl,execlp,execle,execv,execvp,execvpe

 

 我们经过观察发现int exec都是相同的,不同的只是后面几个字母

 为了方便大家理解,我们从最基础的两个使用开始

execl:

execl("绝对路径","使用方法",NULL);

举例:

execl("/usr/bin/ls", "ls", "-a", "-l", "-i", NULL);

execv:

execv("绝对路径","指针数组")(备注:指针数组需要自己定义)

举例:

 char* const argv[NUM] = {
     (char*)"ls", 
     (char*)"-a", 
     (char*)"-i", 
     (char*)"-l", 
      NULL};
    execv("/usr/bin/ls", argv);

有些小伙伴就要说了:替换一个程序还要打根目录,烦不烦啊!

所以这个时候,我们的P兄弟就出来了

他们就是execlp和execvp

他们不需要打根目录,进程根据此进程名自动去环境变量中遍历查找该进程的路径,直接能在当前目录生成

execlp("ls", "ls", "-a", "-l", "-i", NULL);



char* const argv[NUM] = {
     (char*)"ls", 
     (char*)"-a", 
     (char*)"-i", 
     (char*)"-l", 
      NULL};
    execvp("ls", argv);

最后也就是execle和execlvpe,就是我们可以使用自己写的程序,通过环境变量来进行替换

execle:

execle("绝对或相对路径",“进程名字”,“方法”,NULL,“环境变量”)

char* const env[NUM] = {
      (char*)"MY_ENV=2001",
      (char*)"YOU_ENV=2002",
      NULL
    };
    //这里路径可以是绝对路径,也可以是相对路径
    execle("./myproc", "myproc", "-b", NULL, env);

execlvpe:

execlvpe(“进程路径”,“名字+方法+NULL的指针数组”,“存放环境变量的指针数组”)

char* const envp[NUM] = {
      (char*)"MY_ENV=2001",
      (char*)"YOU_ENV=2002",
      NULL
    };
    //argv
    char* const argv[NUM] = {
      (char*)"myproc",
      (char*)"-a",
      NULL
    };
    //execvpe("myproc", argv, envp);
    execvpe("myproc", argv, envp);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis的数据复制

介绍 Redis 的复制 Redis 的复制功能分为同步(sync)和命令传播(command propagate)这两个操作 同步操作用于,将从服务器的数据库状态更新至主服务器当前所处的数据库状态;命令传播操作用于,在…

Java基础1112_包机制_JavaDoc生成文档

目录包机制JavaDoc生成文档方法一方法二包机制 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间; 包语句的语法格式为:package pkg1[. pkg2[. pkg3 …]]; 一般利用公司的域名倒置作为包名;com.b…

二进制搭建k8s集群——部署多master

二进制搭建k8s集群——部署多master二进制搭建k8s集群——部署多master部署master02 节点部署负载均衡在lb01、lb02节点上配置nginx和keepalived两台负载均衡器配置keepalived所有node节点修改配置文件在 master01 节点测试创建pod二进制搭建k8s集群——部署多master 架构说明&…

C~回调函数

还是c的学习啊 一、函数指针 在讲回调函数之前,我们需要了解函数指针。 我们都知道,C语言的灵魂是指针,我们经常使用整型指针,字符串指针,结构体指针等 int *p1; char *p2; STRUCT *p3; //STRUCT为我们定义的结构体…

win10下docker安装

业精于勤荒于嬉,总是与偷懒做斗争。 很多年了,一直不愿做事情,不愿意想事情。 1、安装 Docker Toolbox -- Install on Windows | Docker Documentation http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/DockerToolbox-…

今年你们赚到钱了吗?

峥嵘的2022年,各位程序员们,你们赚到钱了吗? 今天是2022年12月21日,眼看就快过年了! 今年你们赚到钱了吗?对于我而言,又是一个"窘迫/囧迫"的穷年,有点心慌慌,有…

windows安装Elasticsearch

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的&#xff…

纷享销客《华东地区新增长专刊》重磅发布

增长,是企业发展永恒的主题。 纷享销客的使命是用创新科技和行业智慧赋能企业增长。在服务超过5000中大型客户的基础上,我们发现,各行各业从营销端到流通端,再到生产端,已然出现了全渠道、全场景、端到端、一体化融合…

【战“疫”案例展】壹点灵心理服务平台——携手抗疫,共克时艰“星光”同行公益项目...

‍网易云信战“疫”案例本项目由网易云信投递并参与“数据猿行业盘点季大型主题策划活动—— #榜样的力量# 《新冠战“疫”——中国数据智能产业最具社会责任感企业》榜单/奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业自2019年底以来,人们的情绪持…

电脑垃圾站刚清空的文件怎么找回?总结了三种方法

当电脑上删除文件后会临时存放在电脑垃圾站中,如果还需要这些文件,还能有“后悔药”,直接在电脑垃圾站里面找到进行“还原”即可,但是当垃圾站的文件刚被清空了怎么办?如何找回文件呢?下面分享三种方法恢复…

赛狐ERP|假期模式补货建议,解决春节备货难题

马上就到春节假期了,有两个让亚马逊卖家特别头疼的难题: 工厂放假停工 拿不到货 尤其今年不同于往年,各种因素的影响让供应商的放假时间特别早,工厂放假停工以及年后生产排期的不确定性,会导致卖家很长一段时间都无法…

activemq安装windows环境,数据订阅与发布,生产者与消费者

官网下载,选择适合本地jdk编译环境的部署包 安装完成后解压到指定目录,目录不要包含中文,否则可能启动不成功。 解压完成后找到指定路径 双击即可运行 ,见到如下界面启动成功 访问本地管理页面http://127.0.0.1:8161/ 输入账号…

SpringBoot全局异常处理

1、异常处理的种类 我大概把一次请求分成三个阶段,来分别进行全局的异常处理。 在进入Controller之前,譬如请求一个不存在的地址,404错误。在执行RequestMapping时,进入逻辑处理阶段前。譬如传的参数类型错误。以上都正常时&…

升级Win11系统卡在了35%怎么解决?

升级Win11系统卡在了35%怎么解决?Windows11是微软开发的电脑的最新操作系统,不少人都会选择更新到Windows11,但是进行更新安装对很多人来讲并不是一件很简单的事情,不少人都在抱怨安装时常常卡在35%或85%,并且带有一个…

Java.Util复习贴

参加了数次竞赛之后,我发现我的瓶颈所在——语法。于是今天来复习一下常用的Java库函数吧。 比赛中用java8还是10我就不care啦,我直看官方最新文档。地址在 https://docs.oracle.com/javase/10/docs/api/java/util/package-summary.html 首先看到java.…

排序——插入排序、希尔排序

目录 一.插入排序 1.实现 2.时间复杂度 二.希尔排序 2.预排序 (1).单次预排序的实现 (2).相对有序 2.代码 一.插入排序 1.实现 正如其名,是将第n1个数据插入到前面的n的升序(降序)数据中,形成一个n1大小的升序&#xff0…

用于宏观经济数据分析的神经网络(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 宏观经济时间序列的分析和预测是国家决策者非常感兴趣的因素。然而,由于缺乏精确的经济模型和外部因素&#xff08…

浏览器隐藏滚动条(不影响内容滚动)

系列文章目录 文章目录系列文章目录一、背景和效果图如下:1.背景2.设置属性前效果图:2.设置后效果图:二、直接通过CSS修改样式,保存滑动功能1.全局设置滚动条如下(所有的都被隐藏)Css代码如下效果图如下2.给…

DP1363F高度集成的非接触读写芯片 13.56M NFC/RFID读卡器芯片 兼容替代CLRC663

DP1363F高度集成的非接触读写芯片 13.56M NFC/RFID读卡器芯片 兼容替代CLRC663 DP1363F是一款高度集成的非接触读写芯片,集强大的多协议支持、最高射频输出功率,以及突破性技术低功耗卡片检测等优势于一身,满足市场对更高集成度、更小外壳和…

Mybatis 异常总结

java.sql.SQLSyntaxErrorException: #42000 一般发生在修改 删除中 原因可能是 传入的参数与 sql 语句不匹配 It’s likely that neither a Result Type nor a Result Map was specified 异常分析: 关键在第一段提示: It’s likely that neither a Re…