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

局网站建设进入前十名专做零食的网站

局网站建设进入前十名,专做零食的网站,小程序制作预览,wordpress获取当前页面内容大家好#xff0c;我是苏貝#xff0c;本篇博客带大家了解Linux进程#xff08;9#xff09;进程控制1#xff0c;如果你觉得我写的还不错的话#xff0c;可以给我一个赞#x1f44d;吗#xff0c;感谢❤️ 目录 #xff08;A#xff09;什么是进程程序替换#xf… 大家好我是苏貝本篇博客带大家了解Linux进程9进程控制1如果你觉得我写的还不错的话可以给我一个赞吗感谢❤️ 目录 A什么是进程程序替换B原理C父子进程中子进程程序替换原理D使用所有的替换方法exec*并且认识函数参数的含义1. execl2. execv3. execvp4. execlp5. 替换自己写的程序6. execvpe A什么是进程程序替换 先直接看代码和现象execl函数先不用管后面会说到 通过结果我们发现进程在执行完第一个printf函数后执行的是ls -a -l的命令而且不再执行第二个printf函数。所以我们可以看出execl函数的作用是让进程通过execl函数执行新的程序。还是不理解现在让我们来了解进程程序替换的原理 B原理 我们自己的代码编译后生成可执行程序运行程序就变成了进程此时操作系统就要为进程创建pcb、地址空间、页表建立各种映射关系。运行程序testexec时要将对应的代码和数据加载到内存中。 现在执行execl函数我们知道进程内核数据结构代码和数据execl函数做的就是将本进程的代码和数据用新进程的代码和数据覆盖进程的内核数据结构大体不变只有少部分属性会发生改变。 站在替换进程的角度就是这个进程被加载到内存中了 execl函数有没有创建新的进程 没有它只是用老进程的壳子执行新进程的代码 回到上面的例子为什么没有打印第二个printf函数 因为execl函数将本进程的代码和数据用新进程的代码和数据覆盖了 我们来看一下execl函数我们上面的代码里面有后面的参数但是没有用变量接收execl函数的返回值那返回值重要吗 不重要我们可以不关心。只要替换成功原来的代码就被覆盖了所以我们不会再执行原先代码。但如果替换失败我们还是会执行原先代码。 C父子进程中子进程程序替换原理 创建子进程子进程可完成2种任务 子进程执行父进程代码的一部分即执行fork之后父子进程共享的代码子进程执行一个全新的程序使用进程程序替换 下面来讲父子进程中子进程程序替换的原理 在创建子进程后父子进程页表映射的是同一块数据和代码空间 子进程要进程程序替换对于数据a因为进程程序替换是需要将进程的代码和数据用新进程的代码和数据覆盖所以相当于要对数据进行写入为了保证进程的独立性会发生写时拷贝即在物理内存中开辟一块新的空间将数据a拷贝到该空间再对该空间的数据进行写入用新进程的数据覆盖子进程的页表映射到该空间 那代码呢我们之前讲的都是父子进程的代码共享那现在呢 因为子进程的代码也会被替换所以也会发生写时拷贝 现在来用代码试一试 子进程执行的确实是ls -a -l命令我们上面说过只要替换成功原来的代码就被覆盖了所以我们不会再执行exit函数所以退出码是0。 现在我们让进程程序替换失败只修改了框框里的内容 替换失败我们还是会执行原先代码exit(2)所以退出码是2 D使用所有的替换方法exec*并且认识函数参数的含义 一共有6种替换方法下面来逐一介绍 1. execl exec后面的l列表 第一个参数path我们要执行的程序的路径怎么找到程序你得告诉我 后面的参数在命令行中怎么执行就怎么传参 最后的参数一定是NULL 举例修改.c文件如果我们想执行ls -l先传ls的路径/usr/bin/ls再传我们想怎么执行在命令行中是ls -l变成execl函数的参数时就直接填上去就是了不过它们要分成2个参数。如果我们想执行的是ls -a -l那么就要分成3个参数”ls”,”-a”和”-l” 2. execv v表示数组 第一个参数和execl函数一样都是要执行的程序的路径怎么找到程序你得告诉我 第二个参数是个char* const类型的数组只需要将execl除第一个参数以外的所有参数包括NULL放入一个数组中再传这个数组即可 3. execvp v需要数组 p查找这个程序系统会自动在环境变量PATH中进行查找。所以用户可以不传要执行的程序的路径但是程序名要传直接告诉exec*函数我要执行谁就行 4. execlp llist列表 p查找这个程序系统会自动在环境变量PATH中进行查找。所以用户可以不传要执行的程序的路径但是程序名要传直接告诉exec*函数我要执行谁就行 虽然有2个“top”但它们的含义不同。第一个表示我要执行的程序的程序名第二个是我要怎么执行该程序 5. 替换自己写的程序 我们上面替换的都是系统命令可不可以替换我们自己写的程序呢当然可以 先写要替换的我们自己写的程序的.c文件 修改要被替换的.c文件 execl函数的第一个参数传./myprocess我能理解就是传要执行的程序的路径。那第二个参数不是说命令行中怎么传我们就怎么传吗为什么不是和命令行一样传./myprocess而是直接传myprocess因为我们已经知道了myprocess的路径命令行中传./myprocess是因为我们不知道myprocess的路径 只用make将2个.c文件都编译形成可执行程序 替换成功 6. execvpe v数组 p查找这个程序系统会自动在环境变量PATH中进行查找。所以用户可以不传要执行的程序的路径但是程序名要传直接告诉exec*函数我要执行谁就行 e环境变量 修改被替换进程对应的.c文件 第一个参数按标准来是只需要输入程序名系统会自动在环境变量PATH中进行查找。但是因为myprocess程序不在PATH内容的路径中所以只能./myprocess。 第2和第3个参数表示我们将它们传给myprocess程序 修改要替换的我们自己写的程序的.c文件。程序接收到了execvpe函数传递的命令行参数argv数组和环境变量envp数组现在我们将这两个数组打印出来 了解了execvpe函数之后我们就可以知道之前我们说环境变量的时候说bash会将命令行参数表和环境变量的表交给子进程怎么交呢就是bash用execvpe函数将命令行参数表和环境变量表分别作为第二个和第三个参数 传给子进程。子进程将这2张表传给它的子进程同理。 对于execvpe函数的第三个参数的作用整体替换所有的环境变量。所以传参时有3种选择 用自定义环境变量传参用默认的环境变量传参默认的环境变量稍微修改再传参 介绍第二种用默认的环境变量传参 需要用到environ 介绍第三种默认的环境变量稍微修改再传参 需要用到putenv函数修改或添加一个环境变量其实就是将修改写入环境变量表或写入一个新的变量到环境变量表中 好了那么本篇博客就到此结束了如果你觉得本篇博客对你有些帮助可以给个大大的赞吗感谢看到这里我们下篇博客见❤️
http://www.pierceye.com/news/697585/

相关文章:

  • 针对茅台酒企业网站建设方案鸿基建设工程有限公司网站
  • 有创意营销型网站建设wordpress 慢集市
  • 注册网站多少钱永康电子商务网站建设
  • 江西省网站建设庆阳在线网
  • wordpress建站微信联系智慧政务网站怎么做
  • 邯郸购物网站建设电子商务是干什么的工作
  • 网站开发竞聘报告wordpress彩色标签云设置方法
  • 深圳高端网站建设收费宿州百度seo排名软件
  • 彩妆网站建设报告公司网页是什么
  • 站长之家综合查询工具广州网站网站建设
  • 网站开发如何实现数据库的链接同性性做视频网站
  • 网站建设uuiop网站建设盐城最便宜
  • iss怎么做网站一个旅游网站建设
  • 润州网站建设网址生成
  • 备案网站服务内容域名网站打开慢
  • 做网站域名备案需要多久企业年金查询官网
  • 制作企业网站的公司如何制作广告
  • 兰州网站优化excel做网站链接
  • 代做单片机毕业设计网站广州网站建设小程序开发
  • 深圳网站官网建设方案安阳做网站电话
  • 批量扫dedecms做的网站哪个网站可以兼职做效果图
  • 建网站与建网页的区别wordpress 七牛云 cdn
  • 专门做养老院的网站城市文化网站开发背景
  • html5写的网站有什么好处淄博网站制作制作
  • 服装设计素材网站大全做旅游的网站的要素
  • 企业网站建设报价清单深圳小程序建设公司
  • 给人做传销网站开发平台软件要多少钱
  • 腾讯建设网站视频视频视频手机网站报价表
  • 门户网站建设要求南京seo公司教程
  • 网站建设制作要学什么软件福建省城乡建设厅网站