当前位置: 首页 > 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.zqtcl.cn/news/697585/

相关文章:

  • 金华建设公司网站宝武马钢集团公司招聘网站
  • 万州网站制作公司阳江市网站建设
  • 下载建设网站软件投资公司注册资金多少
  • 如何创建一个论坛网站免费域名解析平台
  • 国外经典手机网站设计单位做网站有哪些
  • 网站备案 优帮云百度提交入口网址截图
  • 广州五羊建设官方网站富阳区住房和城乡建设局网站
  • 网站代理怎么做的wordpress有什么缺点
  • 哪些网站可以做免费外贸Wordpress首图自动切换
  • 建网站几个按钮公司黄页企业名录在哪里查
  • 网站建设类外文翻译游戏开科技软件免费
  • 黄山家居网站建设怎么样济南在线制作网站
  • 东莞电子产品网站建设营销型网站推广方式的论文
  • 如何寻找做网站的客户聚名网查询
  • 甘肃制作网站凡科快图官网登录入口在线
  • discuz网站建设教学视频教程哪些大型网站有做互联网金融
  • jquery动画特效网站物流网站前端模板下载
  • 上海集团网站建设网站都是用什么语言写的
  • 地铁公司招聘信息网站网站推广页面 英语
  • 廊坊做网站的企业哪家好做网站app价格多少钱
  • wap网站制作当阳网站建设电话
  • 服装电子商务网站建设3000字中装建设有限公司
  • 河南卓越建设工程有限公司网站怎么做垂直门户网站
  • 接单做网页的网站手机端app开发公司
  • 古田路9号设计网站在线制作图片拼图
  • 深圳网站开发ucreator售后服务 网站建设
  • 做网站的语北京比较好的it公司
  • 长春建站模板制作php项目开发案例源码
  • 绍兴seo外包公司山东网站建设优化
  • php做网站知乎境外网站icp备案