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

浙江建设厅网站查询一起做网站逛市场

浙江建设厅网站查询,一起做网站逛市场,海外网站推广,个人网站建站1. 进程替换的概念 进程替换是指在一个正在运行的进程中#xff0c;用一个新的程序替换当前进程的代码和数据#xff0c;使得进程开始执行新的程序#xff0c;而不是原来的程序。 这种技术通常用于在不创建新进程的情况下#xff0c;改变进程的行为。 我们之前谈到过for…1. 进程替换的概念 进程替换是指在一个正在运行的进程中用一个新的程序替换当前进程的代码和数据使得进程开始执行新的程序而不是原来的程序。 这种技术通常用于在不创建新进程的情况下改变进程的行为。 我们之前谈到过fork函数这个函数可以启动一个子进程子进程继承了父进程的代码和数据。 在谈到进程替换之前我们只能通过判断fork函数的返回值id来区分父子进程并让二者运行不同的分支。而利用进程替换技术我们可以将子进程的代码数据完全替换为另一个程序实现我们所期望的父子进程完全独立为两个不同的进程。 进程替换的原理 进程替换的原理涉及到操作系统的内存管理和进程控制。当一个进程调用exec系列函数时操作系统会将新程序的代码和数据加载到内存中并将其与当前进程的地址空间相关联。这个过程通常涉及到以下几个步骤 加载新程序操作系统将新程序的可执行文件从磁盘加载到内存中。替换代码和数据新程序的代码和数据会替换当前进程的代码和数据段。更新进程状态进程的状态会被更新以反映新程序的执行状态。执行新程序进程开始执行新程序的入口点通常是main函数。 在这个过程中进程的标识符PID和其他一些属性如打开的文件描述符、环境变量等通常会保持不变。 2. exec进程替换函数 在Linux系统中进程替换通常通过exec系列函数来实现该系列函数包含在头文件unistd.h。 这些函数包括 execl执行一个新程序参数以列表形式给出。 int execl(const char *pathname, const char *arg, ...); execlp执行一个新程序参数以列表形式给出并在环境变量PATH中搜索程序。 int execlp(const char *file, const char *arg, ...); execle执行一个新程序参数以列表形式给出并提供自定义的环境变量。 int execle(const char *pathname, const char *arg, ...); execv执行一个新程序参数以数组形式给出。 int execv(const char *pathname, char *const argv[]); execvp执行一个新程序参数以数组形式给出并在环境变量PATH中搜索程序。 int execvp(const char *file, char *const argv[]); execve执行一个新程序参数以数组形式给出并提供自定义的环境变量。 int execve(const char *pathname, char *const argv[], char *const envp[]); execvpe执行一个新程序参数以数组形式给出并提供自定义的环境变量。 int execvpe(const char *file, char *const argv[], char *const envp[]);这些函数的使用方式和参数传递方式略有不同但它们的基本功能都是相同的用新程序替换当前进程的代码和数据。 记忆技巧 l(list)表示参数采用列表。v(vector)参数用数组。p(path)到环境变量PATH中搜索指定程序无需完整路径(带p的函数第一个参数为file代表可执行程序不带p的函数第一个参数为pathname代表完整路径)。e(env) : 表示自定义环境变量不带e的表示继承当前的环境变量。 使用示例 #include stdio.h #include unistd.hint main() {char* vector[] {ls, -l, -a, NULL};int id fork();if(id 0){execvp(ls, vector);return 0;}int pid wait(NULL);return 0; }注意传入的参数为命令行参数也就是说在命令行要执行该程序需要输入什么参数就传递什么主要是不要忘记选项是从第二个参数开始的。 第一个参数传什么都不要紧随你喜欢但要记得传 #include stdio.h #include unistd.hint main() {char* vector[] {cxk, -l, -a, NULL};int id fork();if(id 0){execvp(ls, vector);return 0;}int pid wait(NULL);return 0; }execve函数 该函数相比于其他函数具有一定的特殊性他是上述函数中唯一一个系统调用。 在命令行输入[man exec]能查到如下信息可以看到并没有execve的存在且这些函数都在3号手册当中 只有单独查询execve函数时才能查到可以看到该函数在2号手册(系统调用接口)中 execve函数的特殊性 系统调用层级的基础地位 execve在exec函数族中具有特殊的基础性地位。它是直接与系统调用接口紧密相连的函数。其他的exec系列函数如execl、execv等在很多情况下最终可能会调用execve来实现实际的进程替换操作。例如在一些库函数的实现中为了提供更方便的参数传递方式如execl的可变参数列表形式可能会在内部对参数进行处理后调用execve来完成进程替换的核心功能。参数处理方式的不同 execve的参数包含要执行的程序文件路径、传递给新程序的命令行参数数组以及环境变量数组。这种参数形式与其他exec函数有所不同。像execl函数它的参数是以可变参数列表的形式最后以NULL结尾这种形式在使用上有一定的便利性但在底层实现中可能需要更多的转换工作才能与系统调用接口对接而execve的参数形式更直接地反映了系统调用的需求。安全和权限方面的考虑 由于execve是直接进行进程替换的底层函数在安全和权限管理方面有着重要的作用。它对可执行文件的路径、执行权限等有着严格的要求。当调用execve时系统会根据文件的权限设置如是否可执行、所属用户和组等以及当前进程的权限来判断是否允许进程替换操作。这种严格的权限检查有助于保障系统的安全性。与内核交互的特点 execve在与内核交互时需要将新程序的代码和数据加载到当前进程的地址空间同时更新进程的各种状态信息如程序计数器、堆栈指针等。这个过程涉及到内核中的进程管理、内存管理等多个模块的协同工作。相比其他exec函数execve在与内核的这种深度交互方面更为直接因为其他函数可能会在调用execve之前进行一些额外的参数处理或环境设置。 exec函数族调用关系如下
http://www.w-s-a.com/news/2990643/

相关文章:

  • 那个建设网站好怀来县建设局网站
  • 创建网站的一般步骤公司两学一做网站
  • 免费学习资源网站荷兰服务器租用
  • 做分析图很好用的网站建一个推广网站价格
  • 网站建设招标评分表做公司网站建设价格
  • 抖音免费推广网站100个常用的关键词
  • p2p网站建设小微金融不写编程可以做网站建设
  • 合肥网站建设设计百度人工智能开放平台
  • 网站开发 软文西宁网站建设嘉荐君博l
  • 麻涌镇仿做网站昆明云南微网站制作
  • 如何做环保管家网站怎么下载网站源码
  • 网站膜拜销售网站的功能与建设方案
  • 微山建设局网站甘肃省第八建设集团公司网站
  • 南昌所有建设工程网站无锡网站建设唯唯网络
  • 网站建设 技术要求wordpress登陆图标修改
  • 制作网页需要用到哪些工具成都seo培训学校
  • 站长之家素材国家对地理信息网站建设的重视
  • 网站建设购物商城怎么将html变成为网址
  • 制作网站设计的公司辽宁短视频搜索seo哪家实惠
  • 网站添加白名单哪些网站教你做美食的
  • 地名网站建设方案珠海多语种网站制作
  • vs2010网站设计用整张图片做背景手机网站跳出率低
  • 做全房订制网站公司食品包装设计规范及包装标准
  • wordpress建站网页无法运作小程序登录不上去
  • 怎么用织梦源代码做网站Hdi做指数网站
  • jsp书城网站开发做直播网站用什么系统
  • 珠海市企业网站制作品牌微信里的小程序怎么删除
  • 如何选网站空间免费企业自助建站平台
  • 商务网站建设公司个人网站 网站名称
  • 群晖wordpress建站教程龙岩网站建设行情