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

外贸网站faq小程序怎么运营推广

外贸网站faq,小程序怎么运营推广,wordpress 连接被重置,深圳品牌设计工作室目录 进程替换的概念 进程替换的函数 execl​编辑 execlp execle execv execvp execve 上期,我们学习了进程创建,进程终止和进程等待,今天我们要学习的是进程控制中相对重要的板块------进程替换。 进程替换的概念 在进程创建时&…

目录

进程替换的概念

进程替换的函数

execl​编辑

execlp

execle

 execv

execvp

execve


上期,我们学习了进程创建,进程终止和进程等待,今天我们要学习的是进程控制中相对重要的板块------进程替换。

进程替换的概念

在进程创建时,我们使用了fork函数创建了子进程。但是大家仔细回想一下,其实在子进程创建之后,父子进程共享的是同一代码,可以理解为子进程执行的是父进程代码的一部分,有没有什么办法可以让子进程不去执行父进程的代码,而去执行一份新的代码呢?进程替换就是其中的方法之一。

进程替换:进程替换是指替换到原有进程的代码,但是原有的进程的数据结构不变的技术,就叫做进程替换。

替换原理图示如下。

 由图示可见,进程替换其实是没有新进程的创建的,只是更改了之前进程代码以及虚拟地址空间和页表之间的对应关系。所以进程替换的代价相对而言是比较小的。

进程替换的函数

进程替换主要要用到exec类的函数,用于去执行另一个程序的代码。exec函数主要有六个,我们一一来解释。

execl

参数:第一个参数为要执行的命令的路径,第二个参数为命令行参数,即命令要执行什么,但是最终必须以NULL结尾,不然会出错。

先看下述代码。

这是一个简单的打印程序。运行结果如下:

然后使用execl函数进行替换。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");execl("/usr/bin/ls","ls","-a","-l",NULL);printf("process end\n");return 0;
}

运行结果如下。

我们惊奇的发现,"process end"字符串没有打印,这是为什么呢?

原因就是在进行进程替换之后,当前进程的所有代码都被进行了替换,之前的和之后的代码都被进行了替换,所以替换之后的代码自然没有被执行,所以自然没有打印对应的语句。 

execlp

参数列表:第一个参数为要执行的命令的名称,第二个参数为命令函参数,与execl要求类似。

 代码如下。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");execlp("ls","ls","-a","-l",NULL);printf("process end\n");return 0;
}

运行结果如下。

我们发现运行结果也符合我们的预期。

execle

参数列表:第一个参数为命令的路径,第二个参数为命令行参数与execl类似,第三个参数为环境变量参数。 

代码如下。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");char *env[]={"hello world","hello world","hello yjd"};execle("/usr/bin/ls","ls","-a","-l",NULL,env);printf("process end\n");return 0;
}

运行结果如下。

运行结果符合预期。

 execv

 

参数列表:第一个参数为命令的路径,第二个参数为命令行参数组成的一个指针数组。

代码如下。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");char* const argv[]={"ls","-a","-l",NULL};execv("/usr/bin/ls",argv);printf("process end\n");return 0;
}

 运行结果如下。

运行结果符合预期。

execvp

参数列表:第一个参数为命令名称,第二个参数为命令行参数组成的指针数组。

代码如下。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");char* const argv[]={"ls","-a","-l",NULL};execvp("ls",argv);printf("process end\n");return 0;
}

运行结果如下。

运行结果符合预期。

execve

 这个接口是系统调用接口,其它六个exec类函数都是库函数接口,证明其它六个exec函数与execve函数肯定是有关系的,具体什么关系我们等下再去讨论。

参数列表:第一个参数为命令路径,第二个参数为命令行参数组成的指针数组,第三个参数为环境变量组成的指针数组。 

代码如下。

#include<stdio.h>
#include<unistd.h>int main()
{printf("process begin\n");char* const env[]={"hello world","hello world","hello yjd",NULL};char* const argv[]={"ls","-a","-l",NULL};execve("/usr/bin/ls",argv,env);printf("process end\n");return 0;
}

运行结果如下。

运行结果如何预期。

回到刚开始的问题execve函数与其它几个函数有什么区别呢?

可以理解为除过execve函数之外的其它函数的本质都是execve函数,因为execve函数是系统调用接口,而除execve之外的其它函数都是第三方库的接口,我们知道库函数的实现本质上是系统调用函数的实现。

以上便是本期进程替换的所有内容,到了这里进程控制的所有内容已经全部学习完毕。

本期内容到此结束^_^

 

 

http://www.yayakq.cn/news/406981/

相关文章:

  • 广州网站建设大公司景观设计公司有哪些
  • 中工互联网站建设学市场营销后悔死了
  • 建网站岑溪哪家强?接加工订单的网站
  • 怎么制作网站页面组织建设一百年心得体会
  • 网站被挂马怎么处理网站版面设计流程包括哪些
  • 温州网站建设方案推广自己做的网站发布详细步骤
  • 电子商务网站开发实务个人做免费的网站
  • 微信如何做商城网站枣庄做网站公司
  • 徐州建站网页建设seo分析工具有哪些
  • 河南省住房和城乡建设厅网站文件福建省建设厅网站 2013
  • 网站建设服务器一般多少钱京东企业的电子网站建设
  • wordpress学校站模板做视频课程的网站有哪些
  • 深圳集团网站开发做网站怎么备案
  • 建设网站一般要多钱在线代理服务器免费
  • 凤岗镇做网站58同城 网站建设 推广排名
  • wordpress快速扒站公司起名网站
  • 怎么样网站泛解析怎样做引流推广
  • vivo手机为什么建设网站代理网易游戏合作要多少钱
  • 免费网站推广平台排行榜emlog建站教程
  • 杭州网站开发培训网络维护工程师工资多少
  • 青岛 网站开发为什么我的电脑有些网站打不开
  • 中江建设银行网站长沙做网站品牌
  • 网站内链接怎么做wordpress数据库配置页面
  • 网站 标准做内贸的电子商务网站典型有
  • php网站500错误网站换新域名
  • 做网站的公司天津建设工程合同约定仲裁违反专属管辖吗
  • 怎么在国外网站买东西wordpress调用网站最新文章
  • 深圳出名网站建设公司品牌网站建设价格
  • 邢台做网站哪家公司好企业logo查询网
  • 三五互联网站建设怎么样网页设计代码为什么没有颜色