53-exec进程替换
创始人
2025-05-31 09:51:20

exec进程替换

一.exec系列

1.execl

#include
#include
#includeint main()
{printf("main pid=%d\n",getpid());execl("/usr/bin/ps","ps","-f",(char*)0);printf("execl error\n");exit(0);
}

注意,就是原来的程序换成了ps程序,但是PCB没有改变,但是PCB里面的有些值被修改了,比如pcb中程序的名字换成了新进程的名字;

2.execlp

只给文件名,不需要给文件路径,可以去环境变量PATH所指的位置去搜索;
echo $PATH

3.execle

这个execle多了一个环境变量;

4.execv

execv系列把参数都放在了一个数组中,然后把这个数组传递进去即可;

5.execvp

第一个参数只要文件名,不要路径;

6.execve系统调用

本质上,前面5个都是调用的这个系统调用``execve;

7.总结替换方法:

int execl(const char* path, const char * arg,…);
int execlp(const char* file, const char * arg,…);
int execle(const char* path, const char * arg,…,char* const envp[]);
int execv(const char * path, char* const argv[]);
int execvp(const char * file, char* const argv[]);
int execve(const char * path, char* const argv[],char* constenvp[]); //系统调用

二.fork+exec()例子

1.利用bash创建ps命令----execl的使用结合(结合fork)

fork+exec()是Linux上创建新的进程的方式

#include
#include
#include
#include
#includeint main()
{printf("main pid=%d,ppid=%d\n",getpid(),getppid());pid_t pid=fork();assert(pid!=-1);if(pid==0){printf("child pid=%d,ppid=%d\n",getpid(),getppid());execl("/usr/bin/ps","ps","-f",NULL);printf("execl error");exit(0);}wait(NULL);exit(0);
}

2.当主程序复制产生一个子进程,子进程用新程序(b)替换自身

代码test.c

#include
#include
#include
#include
#includeint main(int argc,char *argv[],char *envp[])
{printf("main pid=%d\n",getpid());pid_t pid=fork();assert(pid!=-1);if(pid==0){char *myargv[]={"b","hello","abc","123",(char*)0};execve("./b",myargv,envp);perror("execl error");exit(0);}wait(NULL);printf("main over\n");exit(0);
}

代码:b.c


#include
#include
#include
#include
#includeint main(int argc,char *argv[],char *envp[])
{printf(" b pid=%d\n",getpid());int i=0;printf("argc=%d\n",argc);for(i=0;iprintf("argv[%d]=%s\n",i,argv[i]);}for(i=0;envp[i]!=NULL;i++){printf("envp[%d]=%s\n",i,envp[i]);}exit(0);
}

相关内容

热门资讯

C++演讲比赛流程管理系统_黑... 任务 学校演讲比赛,12人,两轮,第一轮淘汰赛...
复联4有彩蛋吗,《复联4》古一... 复联4有彩蛋吗目录复联4有彩蛋吗《复联4》古一怎么知道五年后的事,为何会把时间宝石交给班纳?《复联4...
labview数据类型转换字符... wx供重浩:创享日记 对话框发送:labview转换 获取完整无水印报告...
【分享】国内如何使用chatG... 上周,OpenAI宣布正式发布多模态预训练大模型GPT-4,其强大的能力...
软件智能:aaas系统中AI的... 概要(内容概述) <同一>将设计目标确定为“软件智能”的aaas中,AI的任务和AI能...
早日康复祝福语简短8字,早日康... 早日康复祝福语简短8字目录早日康复祝福语简短8字早日康复祝福语简短8字搞定手术祝福语8个字早日康复祝...
淘宝店铺名怎么改,淘宝店铺怎么... 淘宝店铺名怎么改目录淘宝店铺名怎么改淘宝店铺怎么改名淘宝店铺名可以修改吗,怎样修改怎么修改淘宝店铺名...
微信助手怎么查单删 极速百科网... 微信助手怎么查单删目录微信助手怎么查单删微信助手怎么查单删微信如何查单删 2016微信如何知道对方有...
陆家嘴都有什么旅游景点 极速百... 陆家嘴都有什么旅游景点目录陆家嘴都有什么旅游景点陆家嘴都有什么旅游景点陆家嘴有哪些旅游景点上海陆家嘴...
1229 - 拦截导弹的系统数... 1229 - 拦截导弹的系统数量求解 题目描述 某国为了防御敌国的导弹袭击,发展出一种...
如何做好项目缺陷管理 缺陷管理是项目管理工作中的重要环节。Excel表格是国内团队常用的缺陷管理工具,具备上...
Python生成器 1.生成器 生成器是一种特殊的迭代器,它是通过函数来实现的。生成器函数每次执行到yi...
Nginx可视化管理工具 - ... 一、介绍 nginx-proxy-manager 是一个反向代理管理系统,它基于Nginx,具有漂亮...
如何解除迅雷安全模式,迅雷怎样... 如何解除迅雷安全模式目录如何解除迅雷安全模式迅雷怎样解除安全模式迅雷VIP尊享版怎么解除安全模式?迅...
感谢朋友圈留言句子,适合发朋友... 感谢朋友圈留言句子目录感谢朋友圈留言句子适合发朋友圈表达感谢的句子20句发朋友圈的感谢短语有哪些?有...
关于韩娱的小说有没有什么好看的... 关于韩娱的小说有没有什么好看的目录关于韩娱的小说有没有什么好看的求好看的韩娱小说有没有好看的韩娱小说...
什么是表面粗糙度(什么是表面粗... 本篇文章极速百科给大家谈谈什么是表面粗糙度,以及什么是表面粗糙度?它对零件的使用性能有什么影响?对应...
永远用英语怎么说,“永远”除了... 永远用英语怎么说目录永远用英语怎么说“永远”除了“forever”的英文翻译~~还有哪些
少年音怎么练,怎么配出清爽的少... 少年音怎么练目录少年音怎么练怎么配出清爽的少年音?怎么学正太音少年音,像是龙马啊、镜音连啊不二啊那种...
情侣之间的爱称有哪些,情侣称呼... 情侣之间的爱称有哪些目录情侣之间的爱称有哪些情侣称呼有创意的爱称情侣之间好听的称呼都有什么?情侣爱称...
共享汽车怎么租车 极速百科网 ... 共享汽车怎么租车目录共享汽车怎么租车共享汽车怎么租车gofun出行有人开吗?使用方法是什么?共享汽车...
Python应用之爬虫基础:r... 引言 在生活中,大家都使用过浏览器,通过输入要搜索的内容以及鼠标点击等操...
jsp医疗辅助诊断管理系统se... 一、源码特点      JSP医疗辅助诊断管理系统是一套完善的java web信息管理系统ÿ...
db19密钥库和加密 创建密钥库ENCRYPTION_WALLET_LOCATION =(SOURCE =...
开局之年是什么意思(开局之年之... 本篇文章极速百科给大家谈谈开局之年是什么意思,以及开局之年之后是什么年对应的知识点,希望对各位有所帮...
抖音gga什么意思(抖音gg是... 本篇文章极速百科给大家谈谈抖音gga什么意思,以及抖音gg是什么意思对应的知识点,希望对各位有所帮助...
DMZ是什么(防火墙的dmz是... 今天给各位分享DMZ是什么的知识,其中也会对防火墙的dmz是什么进行解释,如果能碰巧解决你现在面临的...
风行SX6Sx6后视镜加热打不... 本篇文章极速百科给大家谈谈风行SX6Sx6后视镜加热打不开,以及东风风行sx6反光镜多少钱对应的知识...
CKA-17 Check Da... 文章目录Issue summary:Useful comment:1. 创建场景1.1...
elasticsearch的入... 目录一.数据聚合1.聚合的种类2.DSL实现聚合2.1.Bucket聚合语法2.2.聚合结果排序2....