进程替换与复制

news2025/3/3 5:24:37

目录

  • 进程替换基础知识
    • 什么是进程替换
    • 进程替换函数
  • 函数使用
    • execl
    • execlp
    • execle
    • execv
    • execvp
    • execve

进程替换基础知识

什么是进程替换

进程替换:把当前进程换为其他进程执行。(其他进程:创建新进程,生成可执行程序,装在进内存)进程替换替换的是进程实体。PCB使用以前的只是修改。

进程替换函数

头文件:#include<unistd.h>
exec系例函数:

函数参数
execlint execl(const char* path, const char * arg,…);
execlpint execlp(const char* file, const char * arg,…);
execleint execle(const char* path, const char * arg,…,char* const envp[]);
execvint execv(const char * path, char* const argv[]);
execvpint execvp(const char * file, char* const argv[]);
execveint execve(const char * path, char* const argv[],char* const envp[]);

参数讲解:*path:新替换的程序的路径名称
*arg:传给新程序主函数的第一个参数,一般是程序的名字
arg后面的参数列表,参数个数变化,但是最后一个是参数必须是空指针。
envp[]:环境变量
argv[]:将
argv以及后面的参数整合成的数组。
函数返回值:此处函数虽然返回值是int,但是如果函数运行成功是没有返回值的,没有返回值就不会运行后续代码。
在这里插入图片描述

函数使用

execl

代码举例:

int main(){
	pid_t pid=fork();
	if(pid==0){
	execl("/usr/bin/ls","ls","--color",(char*)0);
	//execl("./main","./main",(char*)0);
	perror("exec error: ");
	}else{
	 wait(NULL);
	 sleep(5);
	 peintf("parent run\n");
	 }
}

以上代码段中”–color“意为使结果有颜色,我们使用的ls命令其实默认后面又–color,比如ps -ef ,'-‘后面内容解析每一个字符含义,’–'后面解析每一个单词。perror(“error:”);该函数和输出函数是一样的,唯一不同的是此处如果出现错误才会输出,并且输出的是错误原因。wait函数获取子进程的退出码,阻塞父进程,等待子进程结束才会运行父进程。
我们此处讲述execl函数,参数依次是执行的命令的路径,命令名字,参数,结束标志。第二个execl函数是执行我们的main函数。

execlp

int main(){
	pid_t pid=fork();
	if(pid==0){
	execlp("ps","ps","-f",(char*)0);
	perror("exec error:");
	}else{
	 wait(NULL);
	 sleep(5);
	 printf("parent run..");
	 }
}

此处ps我们不需要给路径,此处P指的是PATH系统给定的路径,如何查看系统环境呢?在这里插入图片描述
此处我们通过export 变量名=值(export PATH=$PATH:.)在系统变量中加入了我们当前路径’.'。删除刚添加的系统变量只需要将原来的环境变量重新赋值即可。
在这里插入图片描述

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

execle

int main(int argc,char* argv[],char* envp[]){
	pid_t pid=fork();
	if(pid==0){
	execle("./main","./main",(char*)0,envp);
	perror("error: ");
	}else{
	wait(NULL);
	sleep(5);
	printf("parents..");
	}
}

e指的是环境变量
注意此处环境变量使用envp时必须在main函数中加入参数,这个环境变量是从当前main所在的进程的父进程继承下来的。

execv

int main(){
	pid_t pid=fork();
	if(pid==0){
	char* buff[]={"ps","-f",(char*)0}
	execv("/usr/bin/ps",buff);
	perror("exec error:");
	}else{
	 wait(NULL);
	 sleep(5);
	 printf("parent run..");
	 }
}

同上execl函数不同之处在于将参数放入一个数组中即可。

execvp

int main(){
	pid_t pid=fork();
	if(pid==0){
	char *buff[]={"ps","-f",(char*)0};
	execvp("ps",buff);
	perror("exec error:");
	}else{
	 wait(NULL);
	 sleep(5);
	 printf("parent run..");
	 }
}

execve

int main(int argc,char* argv[],char* envp[]){
	pid_t pid=fork();
	if(pid==0){
	char* buff[]={"./main",(char*)0}
	execle("./main",buff,envp);
	perror("error: ");
	}else{
	wait(NULL);
	sleep(5);
	printf("parents..");
	}
}

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

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

相关文章

Android 13 Wi-Fi状态机流程及Log分析

本文基于Android 13源码解读,对Wi-Fi状态机调用流程进行梳理,并结合Log进行分析,便于大家理解Wi-Fi模块调用流程。 梳理出Wi-Fi状态机共有如下几种状态: mConnectableState mConnectingOrConnectedState mL2ConnectingState mL2ConnectedState mL3ProvisioningState …

【机器学习项目实战10例目录】项目详解 + 数据集 + 完整源码

前言 大家好&#xff0c;我是阿光。 本专栏整理了《机器学习项目实战10例》&#xff0c;内包含了各种不同的入门级机器学习项目&#xff0c;包含项目原理以及源码&#xff0c;每一个项目实例都附带有完整的代码数据集。 正在更新中~ ✨ &#x1f6a8; 我的项目环境&#xff…

《计算机体系结构量化研究方法第6版》1.4 技术趋势

引入 1、以下五种技术是现代计算机实现所不可或缺的。 &#xff08;1&#xff09;集成电路逻辑技术。晶体管密度每年大约增加35%&#xff0c;相当于每4年翻两番。晶片大小的增长速度比较难以预测&#xff0c;也慢一些&#xff0c;增速为每年10%~ 20%。两者综合起来&#xff0c…

【Linux】CentOS 7安装 MySQL

1. 更改Centos YUM 源 1&#xff09; 备份 yum 源配置文件 &#xff08;在根目录下执行&#xff09; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak2&#xff09;将官方的 yum 源换成阿里的yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo…

Day12--渲染二级和三级分类列表

1.动态渲染右侧的二级分类列表 我的操作&#xff1a; 1》在cate.vue中&#xff1a; 2》效果图&#xff1a; *********************************** *********************************** *********************************** 2.循环渲染右侧二级分类列表的 UI 结构&#xff1…

RabbitMQ快速入门

中间件&消息队列 中间件概述 中间件&#xff08;Middleware&#xff09;是处于操作系统和应用程序之间的软件&#xff0c;也有人认为它应该属于操作系统中的一部分。人们在使用中间件时&#xff0c;往往是一组中间件集成在一起&#xff0c;构成一个平台&#xff08;包括开…

你不能错过的【Python爬虫】测试3(爬取所有内容 + 完整源代码 + 架构 + 结果)

目录 一、主要工具包 以及 版本二、架构展示三、各部分code3.1 yjs.py (重要)3.2 items.py3.3 middlewares.py3.4 pipelines.py3.5 settings.py3.6 start.py四、结果展示一、主要工具包 以及 版本 scrapy:2.7.1版本(这里主要用到的工具包) 二、架构展示 三、各部分code 3…

MySQL体系-日志与MVCC(源码层面)

MySQL 本身具备生产binlog日志的功能&#xff0c;在InnoDB存储引擎中&#xff0c;为了持久性有了redo log,为了原子性和隔离性有了undo log&#xff0c;最终通过redo log undo log 保证了一致性&#xff1b; 我先画一个InnoDB操作流程&#xff0c;先简单的了解下它们的工作机制…

基于S2SH的保险业务管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86467452 主要使用技术 SpringStruts2HibernateJSPJSCSSMysql 功能介绍 本系统旨在为当今的保险行业提供一套综合性的管理系统业务&#xff0c;系统的主要用户为保险的购买者以及系统的管理…

10.实用调试技巧

一、调试 1.调试的定义 调试&#xff08;英语&#xff1a;Debugging / Debug&#xff09;&#xff0c;又称除错&#xff0c;是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。 2.调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产…

Linux系统编程(三)——Linux下的进程

第一篇中总结了系统的环境搭建&#xff0c;第二篇中学习了系统的一些IO函数&#xff0c;接下来就深入到了Linux下的进程线程的实现。 目录 0x01 进程概述 一、进程的信息 二、程序与进程 三、并行与并发 四、进程控制块PCB 0x02 进程状态转换 一、进程的状态 二、进程相…

【C++】哈希-bitset位图与模拟

目录 1.位图 1.1什么是位图 1.2位图的作用 2.bitset应用 2.1bitset构造 2.2bitset成员函数与使用 3.bitset模拟实现 构造函数 set reset test flip count size none,any 1.位图 在前文中我们介绍了哈希的一些内容&#xff0c;接下来我们介绍一个新奇的玩意&am…

回归问题原理

回归问题是一种常见的监督机器学习任务&#xff0c;在很多领域均有广泛应用。其典型应用包括销量预测、库存预测、股票价格预测、天气预测等。本问将讨论线性回归&#xff0c;包括线性回归模型的目标函数&#xff08;损失函数和正则函数&#xff09;、线性回归模型的优化求解、…

【一包通刷】晶晨S905L3A/B_完美AI语音线刷包_打开ADB_ROOT权限

【9.0一包通刷】晶晨S905L3A/B_完美AI语音线刷包_默认打开ADB ROOT权限支持游戏启动_万物互联启动动画 适用型号&#xff1a;M401A、CM311-1a、CM311-1sa、B863AV3.1-M2、B863AV3.2-M、UNT403A、M411A等等&#xff1b; 系统版本&#xff1a;Android9 系统桌面&#xff1a;超…

【机器学习项目实战10例】(五):基于随机森林的假新闻检测项目

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、基于随机森林的假新闻检测项目二、数据集介绍三、导包四、加载数据集五、划分训练集、测试集六、构建模型七、精度测试八、网格搜索一、基于随机森林的假新闻检测项目 在当今时代,传播错误信息已经成为一个真正的问题,…

初试hashlib加密模块

文章目录 一、加密解密基础二、使用hashlib模块实现数据加密(一)加密数据1、编写程序,实现功能2、运行程序,查看结果(二)登录加密校验1、编写程序,实现功能2、运行程序,查看结果一、加密解密基础 二、使用hashlib模块实现数据加密 (一)加密数据 1、编写程序,实现功…

【DeepLearning 8】Self-Attention自注意力神经网络

&#x1f34a;本文主要介绍了Self-Attention产生的背景以及解析了具体的网络模型 一、Introduction 很多时候&#xff0c;我们需要输入的数据非常的复杂&#xff0c;难以用统一、固定长度的向量来表示。比如NLP中长短不一的句子。此外&#xff0c;我们需要输出的数据有时候也会…

Spring Security中文文档

Spring Security中文文档 来源&#xff1a;https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben Alex&#xff0c;Luke Taylor&#xff0c;Rob Winch&#xff0c;Gunnar Hillert&#xff0c;Joe Grandja&#xff0c;Jay Bryant5.1.2.RELEASE…

使用Redis查询数据库数据增加访问速度小案例

黑马B栈网课案例 文章目录案例需求&#xff1a;SQL建表所需jar包项目结构代码展示index.html首页面domainProcince.javadaoProvinceDaoProvinceDaoImplserviceProvinceServiceProvinceServiceImplservletJDBC工具类配置文件jedis.propertiesdruid.properties案例需求&#xff1…

JSP学习日记

JSP简述 Java Sever Pages----->Java服务器界面 用于前后端结合 jsp为什么淘汰&#xff1f; 由于JSP的前后端耦合性极高&#xff0c;编写代码非常臃肿。前后端的代码放在一起&#xff0c;所以JSP可以看成是已经被淘汰的技术。 为什么还要学jsp&#xff1f; 由于一些公司…